| ||||||||||
| 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 | |||||||||
Re:比较笨一点的方法,可以参考一下In Reply To:比较笨一点的方法,可以参考一下 Posted by:AK47biubiubiu at 2016-05-07 19:10:37 >
> #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