题意:
给你一幅图,要你找一个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;
}