floyd。
#include<iostream>
#include<algorithm>
using namespace std;
const int inf = 1e9;
int n, m;
int v, t;
int e[105][105];
int tmp[105];
int main()
{
while(cin >> n && n)
{
fill(e[0], e[0] + 105 * 105, inf);
fill(tmp, tmp + 105, -inf);
for(int i = 1; i <= n; i ++)
e[i][i] = 0;
for(int i = 1; i <= n; i ++)
{
cin >> m;
for(int j = 0; j < m; j ++)
{
cin >> v >> t;
e[i][v] = t;
}
}
for(int k = 1; k <= n; k ++)
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
if(e[i][j] > e[i][k] + e[k][j])
e[i][j] = e[i][k] + e[k][j];
bool flag = true, flag2 = true;
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; i ++)
if(j != i && e[j][i] != inf)
{
flag2 = false;
break;
}
if(flag2)
{
flag = false;
break;
}
}
if(!flag)
{
cout << "disjoint" << endl;
continue;
}
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
tmp[i] = max(tmp[i], e[i][j]);
int tmp2 = inf, tmp3;
for(int i = 1; i <= n; i ++)
if(tmp2 > tmp[i])
{
tmp2 = tmp[i];
tmp3 = i;
}
cout << tmp3 << ' ' << tmp2 << endl;
}
// system("pause");
return 0;
}