#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define inf 100005
#define N 105
int g[N][N],dist[N][N];
int n,c;
int cs[N];
int cmp(const void *a,const void *b)
{
return *(int *)a>*(int *)b ?1:-1;
}
void init()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(i!=j) g[i][j]=inf;
else g[i][j]=0;
}
}
void floyd()
{
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(dist[i][j]>dist[i][k]+dist[k][j])
dist[i][j]=dist[i][k]+dist[k][j];
}
void work()
{
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dist[i][j]=g[i][j];
floyd();
int minlen=inf;
k=-1;
int t;
for(i=0;i<c;i++)
{
int u =cs[i];
for(j=1;j<=n;j++)
for(t=1;t<=n;t++)
if(j!=u&&t!=u)
{
if(dist[u][j]+dist[t][u]+dist[j][t]<minlen&&dist[j][t]!=inf)
{
k=u; minlen=dist[u][j]+dist[t][u]+dist[j][t];
}
}
}
if(k==-1) printf("I will nerver go to that city!\n");
else printf("%d\n",k);
}
int main()
{
while(scanf("%d%d",&n,&c)!=EOF)
{
for(int i=0;i<c;i++)
scanf("%d",&cs[i]);
init();
qsort(cs,c,sizeof(cs[0]),cmp);
int m,a,b,c;
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(g[a][b]>c) g[a][b]=c;
}
work();
}
return 0;
}
zoj3166 Lazy Tourist//floyd求两点间最短路
最新推荐文章于 2022-02-25 19:38:17 发布