最短路用floyd算法 就这样……
ps:我老是把T和n弄混了结果一直错啊错啊还不知道为森么〒▽〒,怨念到炸裂……
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int i,j,k;
const int maxn=20;
int s[110][110];
int main()
{
int T;
int m,n;
int maxl=0,minl=maxn;
int sc;
while(scanf("%d",&T)&&T!=0)
{
for(i=1;i<=T;++i)
for(j=1;j<=T;++j)
s[i][j]=maxn;
for(i=1;i<=T;++i)
{
scanf("%d",&n);
for(j=1;j<=n;++j)
{
scanf("%d%d",&k,&m);
s[i][k]=m;
}
}
for(k=1;k<=T;++k)
for(i=1;i<=T;++i)
for(j=1;j<=T;++j)
if(i!=j&&s[i][j]>(s[i][k]+s[k][j]))
s[i][j]=s[i][k]+s[k][j];
minl=maxn;
for(i=1;i<=T;++i)
{
maxl=0;
for(j=1;j<=T;++j)
if(i!=j&&s[i][j]>maxl) maxl=s[i][j];
if(maxl<minl) {minl=maxl;sc=i;}
}
if(minl<maxn) printf("%d %d\n",sc,minl);
else printf("disjoint\n");
}
return 0;
}