HDU-1874 畅道工程续

来源:互联网 发布:python hangman游戏 编辑:程序博客网 时间:2024/05/22 05:13

准备睡觉,明天还得起早上学:(

/* * HDU-1874 畅道工程续 * mike-w * 2011-8-23 *---------------------- * practice dijkstra */#include<stdio.h>#define SIZE 222#define INF (1<<30)long road[SIZE][SIZE];long dist[SIZE];int in[SIZE];int N,M;int S,T;int extract(void){int i,t;for(i=0;i<N;i++)if(!in[i]&&dist[i]<INF)break;for(t=i++;i<N;i++)if(!in[i]&&dist[i]<INF&&dist[i]<dist[t])t=i;return t>=N?-1:t;}long dijkstra(void){int i;long min;dist[S]=0;while((min=extract())!=T){if(min==-1)return -1;in[min]=1;for(i=0;i<N;i++)if(!in[i]&&road[i][min]<INF&&dist[min]+road[min][i]<dist[i])dist[i]=dist[min]+road[min][i];}return dist[T];}int main(void){int i,j,t1,t2;long t3;/*freopen("1874.in","r",stdin);*/while(scanf("%d%d",&N,&M)!=EOF){/* initialize */for(i=0;i<N;i++)for(j=0;j<N;j++)road[i][j]=INF;for(i=0;i<N;i++)in[i]=0,dist[i]=INF;/* read input */for(i=0;i<M;i++){scanf("%d%d%ld",&t1,&t2,&t3);if(t3<road[t1][t2])road[t1][t2]=road[t2][t1]=t3;}scanf("%d%d",&S,&T);/* produce answer */printf("%ld\n",dijkstra());}return 0;}


 

原创粉丝点击