最短路问题 数据不大 我直接用的Floyd
#include<bits/stdc++.h>
using namespace std
const int maxn=999999;
int n,f[105][105],ff[105];
int main(){
while(cin>>n){
if(n==0)break;
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j)f[i][j]=maxn;
int ge;
for(int i=1;i<=n;i++){
cin>>ge;
int a,b;
while(ge--){
cin>>a>>b;
f[i][a]=b; } }
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
if(f[j][k]>f[j][i]+f[i][k])f[j][k]=f[j][i]+f[i][k];
int maxx[105],geshu[105];
for(int i=1;i<=n;i++) {
geshu[i]=0,maxx[i]=f[i][1];
for(int j=1;j<=n;j++) {
if(f[i][j]==maxn)break;
geshu[i]++;
if(f[i][j]>maxx[i])maxx[i]=f[i][j]; } }
int minn=maxn,t,flag=1;
for(int i=1;i<=n;i++)
if(maxx[i]<minn&&geshu[i]==n){
minn=maxx[i];
t=i;
flag=0;}
if(!flag)cout<<t<<" "<<minn<<endl;
else cout<<"disjiont"<<endl; }
return 0;}