ZOJ3166【找环值最小】
题意:
给你一幅图,要你找一个hotel能够满足出去回来,而且保证权值最小;
思路:
可以搜环,然后取最小权值环,拿个点;
floyd方便,初始话自己到自己就是无穷,然后就枚举一下给出的hotel就好了
#include<bits/stdc++.h> using namespace std; const int N=1e2+10; const int INF=0x3f3f3f3f; int ma[N][N],hotels[N]; int n,m,C; void floyd() { for(int k=1;k<=n;k++) { for(int i=1;i<=n;++i) { for(int j=1;j<=n;j++) { if(ma[i][k]+ma[k][j]<ma[i][j]) ma[i][j]=ma[i][k]+ma[k][j]; } } } } void Judge() { int index=-1,tmin=INF; for(int i=1;i<=C;i++) { if(ma[hotels[i]][hotels[i]]<tmin) { tmin=ma[hotels[i]][hotels[i]]; index=hotels[i]; } } if(index!=-1) printf("%d\n",index); else puts("I will nerver go to that city!"); } int main() { int i; while(~scanf("%d%d",&n,&C)) { int a,b,c; for(i=1;i<=C;i++) scanf("%d",&hotels[i]); memset(ma,INF,sizeof(ma)); scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); ma[a][b]=min(ma[a][b],c); } floyd(); Judge(); } return 0; }