Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
比较笨一点的方法,可以参考一下#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int INF=0x3f3f3f3f; const int N=1000+10; int n,m,y,w[N][N],d[N][N],v[N]; void dijkstra() { int i,j; for(i=1; i<=n; i++) for(j=1; j<=n; j++) d[i][j]=i==j?0:INF; memset(v,0,sizeof(v)); for(i=1;i<=n;i++)//以2为起点; { int x,m=INF; for(j=1;j<=n;j++) if(!v[j]&&d[y][j]<=m) m=d[y][x=j]; v[x]=1; for(j=1;j<=n;j++) d[y][j]=min(d[y][j],d[y][x]+w[x][j]); } memset(v,0,sizeof(v)); for(i=1;i<=n;i++)//到2; { int x,m=INF; for(j=1;j<=n;j++) if(!v[j]&&d[j][y]<=m) m=d[x=j][y]; v[x]=1; for(j=1;j<=n;j++) d[j][y]=min(d[j][y],d[x][y]+w[j][x]); } int maxx=0; for(i=1;i<=n;i++) { d[y][i]+=d[i][y]==INF?0:d[i][y]; maxx=max(maxx,d[y][i]); } // for(i=1;i<=n;i++) // printf("2->%d %d\n",i,d[2][i]); // printf("***\n***\n"); // for(i=1;i<=n;i++) // printf("%d->2 %d\n",i,d[i][2]); printf("%d\n",maxx); } int main() { int i,j,a,b,c; scanf("%d%d%d",&n,&m,&y); for(i=1; i<=n; i++) for(j=1; j<=n; j++) w[i][j]=i==j?0:INF; for(i=1; i<=m; i++) { scanf("%d%d%d",&a,&b,&c); w[a][b]=c; } // printf("***\n***\n"); dijkstra(); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator