标签:des io os ar for sp 2014 art c
Silver Cow PartyUSACO 2007 February Silver
/***************************** author : Grant Yuan time : 2014/10/4 23:07 source : POJ 3268 algorithm: Dijkstra ******************************/ #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; #define MAX 1007 #define INF 0x7ffffff struct point{int x,y;}; int n,m,x; int ans; point v[MAX]; int cost[MAX][MAX]; bool used[MAX]; int mincost[MAX]; int start,final; int sum[MAX]; void Dijkstra_Go() { for(int i=1;i<=n;i++) { used[i]=false; mincost[i]=cost[i][x]; } for(int i=1;i<=n;i++) { int temp=INF; int k=-1; for(int j=1;j<=n;j++) { if(!used[j]&&mincost[j]<temp) { temp=mincost[j]; k=j; } } if(k==-1) break; used[k]=true; for(int j=1;j<=n;j++) { if(!used[j]) mincost[j]=min(mincost[j],mincost[k]+cost[j][k]); } } } void Dijkstra_Back() { for(int i=1;i<=n;i++) { used[i]=false; mincost[i]=cost[x][i]; } for(int i=1;i<=n;i++) { int temp=INF;int k=-1; for(int j=1;j<=n;j++) { if(!used[j]&&mincost[j]<temp) { temp=mincost[j]; k=j; } } if(k==-1) break; used[k]=true; for(int j=1;j<=n;j++) { if(!used[j]) mincost[j]=min(mincost[j],mincost[k]+cost[k][j]); } } } int main() { while(~scanf("%d%d%d",&n,&m,&x)){ ans=0; memset(sum,0,sizeof(sum)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cost[i][j]=INF; for(int i=1;i<=n;i++) cost[i][i]=0; for(int i=1;i<=m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); cost[a][b]=c; } Dijkstra_Go(); for(int i=1;i<=n;i++) { sum[i]=mincost[i]; } Dijkstra_Back(); for(int i=1;i<=n;i++) { sum[i]+=mincost[i]; } for(int i=1;i<=n;i++) ans=max(ans,sum[i]); printf("%d\n",ans);} return 0; }
标签:des io os ar for sp 2014 art c
原文地址:http://blog.csdn.net/yuanchang_best/article/details/39785025