您的位置:首页 > 其它

hdu1874 畅通工程续

2012-08-02 12:30 190 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

/* Dijkstra  学习中 模版留存*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define M 5000000
int map[500][500],d[10000],vis[10000],n,mm;
void dij(int start)
{
    int i,x,y;
    memset(vis,0,sizeof(vis));
    for(i=0;i<n;i++) d[i]=(i==start?0:M);
    for(i=0;i<n;i++)
    {
        int m=M;
        for(y=0;y<n;y++)
        if(!vis[y]&&d[y]<=m)
        {
            m=d[y];x=y;
        }
        vis[x]=1;
        for(y=0;y<n;y++)
        {
            int temp=d[x]+map[x][y];
            if(d[y]>temp)
            d[y]=temp;
        }
    }
}
int main()
{
    while(scanf("%d%d",&n,&mm)!=EOF)
    {
        int i,j,a,b,x,s,e;
        for(i=0;i<n;i++)
          for(j=0;j<n;j++)
              map[i][j]=M;
        while(mm--)
        {
            scanf("%d%d%d",&a,&b,&x);
            if(map[a][b]>x)
            {
                map[a][b]=x;
                map[b][a]=x;
            }
        }
            scanf("%d%d",&s,&e);
            dij(s);
            printf("%d\n",d[e]==M?-1:d[e]);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: