#include"iostream"
using namespace std;
const int vex=2000;
const int maxl=999999;
void dijkstra(int n,int v,int *dist,int c[][vex])
{
int i,j;
int s[vex];
for(i=1;i<=n;i++)
{
dist[i]=c[v][i];
s[i]=0;
}
s[v]=1;
dist[v]=0;
for(i=2;i<=n;i++)
{
int temp=maxl;
int u=v;
for(j=1;j<=n;j++)
if(!s[j]&&dist[j]<temp)
{
temp=dist[j];
u=j;
}
s[u]=1;
for(j=1;j<=n;j++)
{
if(!s[j]&&c[u][j]<maxl)
{
int newdist=dist[u]+c[u][j];
if(newdist<dist[j])
{
dist[j]=newdist;
}
}
}
}
}
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
//freopen("a.txt","r",stdin);
int T,S,D,i,j,s,t,len;
int dist[vex];
int c[vex][vex];
int start[vex];
int end[vex];
while(cin>>T>>S>>D)
{
for(i=0;i<vex;i++) //由于点不确定 就把整个数组都初始化了
{
for(j=0;j<vex;j++)
{ //可以加上
//if(i!=j)
c[i][j]=maxl;
//else //可以加上
//c[i][j]=0; //可以加上
}
dist[i]=maxl;
}
int maxn=0;
for(i=0;i<T;i++)
{
cin>>s>>t>>len;
if(c[s][t]>len)
c[s][t]=c[t][s]=len;
if(max(s,t)>maxn)
maxn=max(s,t);
}
for(i=0;i<S;i++)
cin>>start[i];
for(i=0;i<D;i++)
cin>>end[i];
int min=maxl;
for(i=0;i<S;i++)
{
dijkstra(maxn,start[i],dist,c);
for(j=0;j<D;j++)
if(dist[end[j]]<min)
min=dist[end[j]];
}
cout<<min<<endl;
}
return 0;
}
hdoj2066在做一次
最新推荐文章于 2018-07-19 10:35:04 发布