| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
题意依然晦涩难懂。麻痹,光理解题意就得花几个小时。SPFA过了。两个EOF……ORZ。#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
#define LL long long
using namespace std;
struct lx
{
int v,len;
};
vector<lx>g[501];
int n,m;
bool thend[501];
int d[501];
void SPFA(int start,int *dis)
{
queue<int>q;
bool vis[501];
for(int i=1;i<=n;i++)
vis[i]=0;
dis[start]=0;
vis[start]=1;
q.push(start);
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int j=0; j<g[u].size(); j++)
{
int v=g[u][j].v;
int len=g[u][j].len;
if(dis[v]>dis[u]+len)
{
dis[v]=dis[u]+len;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
for(int i=1; i<=n; i++)
thend[i]=0,g[i].clear();
for(int i=1; i<=m; i++)
{
int tmp;
scanf("%d",&tmp);
thend[tmp]=1;
}
int u,v,len;
while(scanf("%d%d%d",&u,&v,&len)!=EOF)
{
lx now;
now.len=len;
now.v=v,g[u].push_back(now);
now.v=u,g[v].push_back(now);
}
for(int i=1;i<=n;i++)
d[i]=INF;
for(int i=1;i<=n;i++)
if(thend[i])
{
SPFA(i,d);
}
int minn=INF;
int ans=1;
for(int i=1;i<=n;i++)
{
int maxn=0;
if(thend[i])continue;
int dis[501];
for(int j=1;j<=n;j++)
dis[j]=d[j];
SPFA(i,dis);
for(int j=1;j<=n;j++)
maxn=max(maxn,dis[j]);
if(minn>maxn)
{
minn=maxn;
ans=i;
}
}
printf("%d\n",ans);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator