和1092做法差不多的
Accepted | 1082 | C++ | 00:00.00 | 428K |
#include<stdio.h>
#include <string.h>
void solve(int n)
{
int i,j,k,g[100][100 ];
memset(g,1,sizeof (g));
for(i = 0; i < n; i++ )
{
int m;
scanf("%d",& m);
for(j = 0; j < m; j++ )
{
int a,b;
scanf("%d%d",&a,& b);
g[i][a - 1] = b;
}
}
for(k = 0; k < n; k++ )
for(i = 0; i < n; i++ )
for(j = 0; j < n; j++ )
if(g[i][j] > g[i][k] + g[k][j])
g[i][j] = g[i][k] + g[k][j];
int mins = 0xffff ,num;
for(i = 0; i < n; i++ )
{
int max = 0 ;
for(j = 0; j < n; j++ )
if(i == j) continue ;
else if(g[i][j] > 1000) break ;
else if(max < g[i][j]) max = g[i][j];
if(j >= n && mins > max)
mins = max, num = i;
}
mins == 0xffff ? printf("disjoint/n") : printf("%d %d/n",num + 1 ,mins);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1082.txt","r" ,stdin);
#endif
int n;
while(scanf("%d",&n) != EOF && n != 0 )
solve(n);
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0 ;
}
#include <string.h>
void solve(int n)
{
int i,j,k,g[100][100 ];
memset(g,1,sizeof (g));
for(i = 0; i < n; i++ )
{
int m;
scanf("%d",& m);
for(j = 0; j < m; j++ )
{
int a,b;
scanf("%d%d",&a,& b);
g[i][a - 1] = b;
}
}
for(k = 0; k < n; k++ )
for(i = 0; i < n; i++ )
for(j = 0; j < n; j++ )
if(g[i][j] > g[i][k] + g[k][j])
g[i][j] = g[i][k] + g[k][j];
int mins = 0xffff ,num;
for(i = 0; i < n; i++ )
{
int max = 0 ;
for(j = 0; j < n; j++ )
if(i == j) continue ;
else if(g[i][j] > 1000) break ;
else if(max < g[i][j]) max = g[i][j];
if(j >= n && mins > max)
mins = max, num = i;
}
mins == 0xffff ? printf("disjoint/n") : printf("%d %d/n",num + 1 ,mins);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1082.txt","r" ,stdin);
#endif
int n;
while(scanf("%d",&n) != EOF && n != 0 )
solve(n);
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0 ;
}