| ||||||||||
| 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 | |||||||||
Re:100题纪念!In Reply To:100题纪念! Posted by:luoxuqing at 2016-09-16 16:22:30 #include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
const int N=501, inf=1000000000;
struct edge
{
int v,c,nx;
}e[500010];
int dis[N],res[N],fire[N],head[N],q[N*10],n,m,id,i,j,a,b,w,Min,mx,ans;
void add(int u, int v, int w)
{
id++; e[id].v=v; e[id].c=w; e[id].nx=head[u]; head[u]=id;
}
void spfa(int src, int dis[])
{
int i,l,r,u,v;
struct edge tmp;
dis[src]=0; l=0; r=1; q[1]=src;
while (l<r)
{
l++; u=q[l];
i=head[u];
while (i!=-1)
{
v=e[i].v;
if (dis[u]+e[i].c<dis[v])
{
dis[v]=dis[u]+e[i].c;
r++; q[r]=v;
}
i=e[i].nx;
}
}
}
int main()
{
ans=1; Min=inf;
memset(head,-1,sizeof(head));
scanf("%d%d",&m,&n);
for (i=1; i<=n; i++) dis[i]=inf;
for (i=1; i<=m; i++) scanf("%d",&fire[i]);
while (scanf("%d",&a)==1)
{
scanf("%d%d",&b,&w);
add(a,b,w); add(b,a,w);
}
for (i=1; i<=m; i++)
{
if (dis[fire[i]]==0) continue;
spfa(fire[i],dis);
}
for (i=1; i<=n; i++)
{
if (dis[i]==0) continue;
for (j=1; j<=n; j++) res[j]=dis[j];
spfa(i,res);
mx=-1;
for (j=1; j<=n; j++)
if (res[j]>mx) mx=res[j];
if (mx<Min){ Min=mx; ans=i;}
}
cout<<ans<<endl;
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator