您的位置:首页 > 其它

hdu2066-一个人的旅行

2015-08-26 17:03 351 查看
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<map>
#include<queue>
#include <deque>
#include <list>
#include <ctime>
#include <stack>
#include <vector>
#include<set>
#define Maxn 1024
#define MOD
typedef long long ll;
#define FOR(i,j,n) for(int i=j;i<=n;i++)
#define DFR(i,j,k) for(int i=j;i>=k;--i)
#define lowbit(a) a&-a
#define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a
const int inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
using namespace std;
int map_s[Maxn+10][Maxn+10],maxx;
bool start[Maxn+10],endd[Maxn+10];
int floyd()
{   int minn=inf;
FOR(k,1,maxx)
FOR(i,1,maxx)if(map_s[i][k]!=inf)
{FOR(j,1,maxx)
{ if(map_s[i][j]>map_s[i][k]+map_s[k][j]) map_s[i][j]=map_s[i][k]+map_s[k][j];
if(start[i]&&endd[j]&&minn>map_s[i][j])
minn=map_s[i][j];
}
}
return minn;
}
int main()
{   int t,s,d,a,b,time,tmp;
while(~scanf("%d%d%d",&t,&s,&d))
{   maxx=0;
FOR(i,1,Maxn)
FOR(j,1,Maxn)
map_s[i][j]=inf;
FOR(i,1,t)
{scanf("%d%d%d",&a,&b,&time);
maxx=maxx>a?maxx:b;
maxx=maxx>b?maxx:b;
map_s[a][b]=map_s[b][a]=map_s[a][b]<time?map_s[a][b]:time;
}
memset(start,false,sizeof(start));
memset(endd,false,sizeof(endd));
FOR(i,1,s)
{scanf("%d",&tmp);
start[tmp]=true;
}
FOR(i,1,d)
{scanf("%d",&tmp);
endd[tmp]=true;
}
printf("%d\n",floyd());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: