ZOJ3166-Lazy Tourist
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3166
#include<stdio.h> #include<string.h> #define INF 0xfffffff #define N 102 int map[N][N],hot[N],n,min,c; void floyd() { int i,j,k,t; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(map[i][j]>map[i][k]+map[k][j]&&map[i][k]!=INF&&map[k][j]!=INF) map[i][j]=map[i][k]+map[k][j]; for(i=1,t=-1,min=INF;i<=c;i++) if(map[hot[i]][hot[i]]<min) min=map[t=hot[i]][hot[i]]; if(t==-1) printf("I will nerver go to that city!\n"); else printf("%d\n",t); } int main(void) { int i,j,m,a,b,d; while(scanf("%d%d",&n,&c)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=INF; for(i=1;i<=c;i++) scanf("%d",&hot[i]); scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&d); if(map[a][b]>d) map[a][b]=d; } floyd(); } return 0; }