HDU 1874 畅通工程续

http://acm.hdu.edu.cn/showproblem.php?pid=1874

第一次知道有个东西叫重边。。。囧

View Code
#include <iostream>

#include <string.h>

using namespace std;

const int INF=1000000000;

int map[210][210];

int n,m,f;

int dis[210],vis[210];

int Dijkstra(int s,int t)

{

    for(int i=0;i<n;i++)

        dis[i]=INF;

    memset(vis,0,sizeof(vis));

    dis[s]=0;

    for(int i=0;i<n;i++)

    {

        int ans=INF,u;

        for(int j=0;j<n;j++)

            if(!vis[j] && dis[j]<ans)

            {

                ans=dis[j];

                u=j;

            }

        vis[u]=1;

        if(u==t){

            f=1;

            return ans;    

        } 

        for(int j=0;j<n;j++)

            if(map[u][j]!=INF && dis[u]+map[u][j]<dis[j])

                dis[j]=dis[u]+map[u][j];

    }

}

int main()

{

    while(~scanf("%d%d",&n,&m))

    {

        f=0;

        int s,t,k;

        for(int i=0;i<=n;i++)

            for(int j=0;j<=n;j++)

                map[i][j]=INF;

        for(int i=0;i<m;i++)

        {

            scanf("%d%d%d",&s,&t,&k);

            if(map[s][t]>k)

                map[s][t]=map[t][s]=k;

        }

        int a,b;

        scanf("%d%d",&a,&b);

        int ans=Dijkstra(a,b);

        if(f)

            printf("%d\n",ans);

        else

            puts("-1");

    }

    return 0;

} 

 

你可能感兴趣的:(HDU)