您的位置:首页 > 其它

HDU 2066 一个人的旅行

2012-05-13 22:57 281 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2066

裸最短路,一开始又sb了,处理错复杂度TLE,囧

View Code

#include <stdio.h>
#include <string.h>
const int INF=1000000001;
const int maxn=1001;
int G[maxn][maxn];
int dis[maxn];
int vis[maxn];
int node1[maxn],node2[maxn];
int n;
void Dijkstra(int s)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<=n;i++)
dis[i]=INF;
dis[s]=0;
for(int i=0;i<n;i++)
{
int ans=INF,u;
for(int j=1;j<=n;j++)
if(!vis[j] && dis[j]<ans)
{
ans=dis[j];
u=j;
}
vis[u]=1;
for(int j=1;j<=n;j++)
if(!vis[j] && G[u][j]+dis[u]<dis[j])
dis[j]=G[u][j]+dis[u];
}
}
int main()
{
int T,S,D;
while(~scanf("%d%d%d",&T,&S,&D))
{
int a,b,time;
for(int i=0;i<1001;i++)
for(int j=0;j<1001;j++)
G[i][j]=INF;
n=0;
while(T--)
{
scanf("%d%d%d",&a,&b,&time);
if(G[a][b]>time)
G[a][b]=G[b][a]=time;
if(n<a)n=a;
if(n<b)n=b;
}
for(int i=1;i<=S;i++)
scanf("%d",&node1[i]);
for(int i=1;i<=D;i++)
scanf("%d",&node2[i]);
int ans=INF;
for(int i=1;i<=S;i++)
{
Dijkstra(node1[i]);
int minn=INF;
for(int j=1;j<=D;j++)
if(dis[node2[j]]<minn)minn=dis[node2[j]];
if(ans>minn)ans=minn;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: