#include <stdio.h> #include <string.h> #define max 1<<20 int start,end; int pre[10005],dis[10005]; int num; struct node{ int to,next,v; }T[20005]; void add(int a,int b,int c) { T[num].to=b; T[num].v=c; T[num].next=pre[a]; pre[a]=num++; } void wtf(int m,int n) { int vis[10005]; int flag; memset(vis,0,sizeof(vis)); int i; for(i=0;i<=m;i++) dis[i]=max; int min; for(i=0;i<m;i++) dis[i]=max; vis[start]=1; for(i=pre[start];i!=-1;i=T[i].next ) dis[T[i].to ]=T[i].v ; flag=start; while(1) { min=max; if(flag==end) break; for(i=0;i<m;i++) { if(!vis[i]&&dis[i]<min) { min=dis[i]; flag=i; } } if(min==max) break; vis[flag]=1; for(int i=pre[flag];i!=-1;i=T[i].next) { int y=T[i].to; if(!vis[y]) dis[y]=((dis[flag]+T[i].v)<dis[y])?(dis[flag]+T[i].v):(dis[y]); } } } int main() { int m,n,t; while(scanf("%d%d%d",&m,&n,&t)!=EOF) { num=0; memset(pre,-1,sizeof(pre)); scanf("%d%d",&start,&end); for(int i=0;i<n;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } wtf(m,n); if(10*dis[end]<=t) printf("%d\n",dis[end]*10); else printf("I am sorry,jlh!\n"); } return 0; } |
Double click to view unformatted code.