| ||||||||||
| 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 | |||||||||
好象明白了,如果所有的点都有了,但还要去建,这样吗?太变态了,但我的程序试了一下好象是这样的In Reply To:bingo Posted by:frkstyc at 2005-10-12 13:58:56 #include "stdio.h"
#define max 100000000
int location[510]={0},b[510][510]={0},c[510];
int main()
{
int n,m,i,j,k,nn,c1,c2,len,temp,max1,max2;
scanf("%d%d",&n,&m);
for(i=0;i<=m;i++) for(j=0;j<=m;j++)
{ if(i!=j)
b[i][j]=max;
else
b[i][j]=0;
}
for(i=0;i<n;i++){
scanf("%d",&nn);
location[nn]=1;
}
while(scanf("%d %d %d",&c1,&c2,&len)==3&&c1){
b[c1][c2]=b[c2][c1]=len;
}
for(i=1;i<=m;i++)
{
if(!location[i])
{
for(j=1;j<=m;j++)
for(k=1;k<=m;k++)
{
if(b[j][k]>b[j][i]+b[i][k])
b[j][k]=b[k][j]=b[j][i]+b[i][k];
}
}
}
for(i=1;i<=m;i++)
c[i]=max;
for(i=1;i<=m;i++)
if(location[i])
for(j=1;j<=m;j++){
if(i==j)
c[i]=0;
else
c[j]=(c[j]<b[i][j]? c[j]:b[i][j]);
}
max1=1000000,max2=0,temp=0;
for(i=1;i<=m;i++)
{
if(!location[i]) //如果不去掉这个,就WA,但是把temp一开始设为1
{ //去掉也AC
for(j=1;j<=m;j++)
if(i!=j){
k=(c[j]<b[i][j]? c[j] : b[i][j]);
max2=(max2>k? max2 : k);
}
if(max1>max2)
max1=max2,temp=i;
}
max2=0;
}
printf("%d\n",temp);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator