#include<cstdio>
#include<algorithm>
using namespace std;
int a[101][101],m=1,b[101],exsit[10001],head=0,tail=1;
struct node{
int x,y,z;
};
void find(int x)
{
int i;
for(i=1;i<=m;i++)
{
if((a[x][i]+b[x])<b[i])
{
b[i]=b[x]+a[x][i];
exsit[tail]=i;
tail++;
}
}
head++;
if(head>=tail) return;
find(exsit[head]);
}
int main()
{
int i,j,k,x,y,z,flag,max=0,mark=0;
node min;
min.x=10000000;
min.z=1;
while(m!=0)
{
int i,j,k,x,y,z,flag,max=0,mark=0;
node min;
min.x=10000000;
min.z=1;
scanf("%d",&m);
if(m==0) break;
for(k=1;k<=100;k++)
for(j=1;j<=100;j++)
a[k][j]=100;
for(i=1;i<=m;i++)
{
scanf("%d",&x);
for(j=1;j<=x;j++)
{
scanf("%d%d",&y,&z);
a[i][y]=z;
}
}
for(i=1;i<=m;i++)
{
for(k=1;k<=100;k++)
b[k]=100;
max=0;
head=0;
tail=1;
mark=0;
flag=i;
b[flag]=0;
find(flag);
for(j=1;j<=m;j++)
{
if(b[j]>max) max=b[j];
if(b[j]==100)
{
mark=1;
break;
}
}
if(mark==1&&min.z==1) min.z=1;
else if(mark==0)
{
if(max<min.x)
{
min.x=max;
min.y=flag;
min.z=0;
}
}
}
if(min.z==1) printf("disjoint");
else printf("%d %d\n",min.y,min.x);
}
}
poj1125spfa算法
最新推荐文章于 2022-04-12 08:19:31 发布