您的位置:首页 > 其它

hdu 2066 一个人的旅行

2014-04-21 21:58 369 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2066

这道题用floyd做的时候要稍微优化,不优化就会超时。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 1001
using namespace std;

const int inf=1<<28;

int g[maxn][maxn];
int a,b,t,max1;
int s1[maxn];
int d1[maxn];

void floyd()
{
for(int k=1; k<=max1; k++)
{
for(int i=1; i<=max1; i++)
{
if(g[i][k]==inf) continue;
for(int j=1; j<=max1; j++)
{
if(g[i][j]>g[i][k]+g[k][j])
g[i][j]=g[i][k]+g[k][j];
}
}
}
}

int main()
{
int T,s,d;
while(cin>>T>>s>>d)
{
for(int i=0; i<=maxn; i++)
{
for(int j=0; j<=maxn; j++)
{
if(i==j) g[i][j]=0;
else g[i][j]=inf;
}
}
max1=-1;
for(int i=0; i<T; i++)
{
scanf("%d%d%d",&a,&b,&t);
if(g[a][b]>t) g[a][b]=g[b][a]=t;
max1=max(max1,a);
max1=max(max1,b);
}
floyd();
for(int i=0; i<s; i++)
{
scanf("%d",&s1[i]);
}
for(int j=0; j<d; j++)
{
scanf("%d",&d1[j]);
}
int min2=99999999;
for(int i=0; i<s; i++)
{
for(int j=0; j<d; j++)
{
min2=min(min2,g[s1[i]][d1[j]]);
}
}
printf("%d\n",min2);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: