1 条题解
-
0
C++ :
#include<stdio.h> #include<string.h> #define INF 0xffffff #define Max 100 void Floyd(int map[][Max], int n) { int A[Max][Max]; int i, j, k; for(i = 0; i < n; i++){ for(j = 0; j < n; j++){ A[i][j] = map[i][j]; } } for(k = 0; k < n; k++){ for(i = 0; i < n; i++) for(j = 0; j < n; j++) if(A[i][j] > A[i][k]+A[k][j]) A[i][j] = A[i][k]+A[k][j]; } int min, min_max, yes = 0, x; for(i = 0; i < n; i++){ min_max = 0; for(j = 0; j < n; j++){ if(A[i][j] > min_max) min_max = A[i][j]; } if(min_max < INF)yes = 1; else if(i) continue; if(!i) { x = i; min = min_max; } else if(min_max < min){ x = i; min = min_max; } } if(yes) printf("%d %d\n", x+1, min); else printf("disjoint\n"); } int main() { int n, map[Max][Max], m, x, v; int i, j; scanf("%d", &n); for(i = 0; i < n; i++){ for(j = 0; j < n; j++) if(i != j)map[i][j] = INF; else map[i][j] = 0; } for(i = 0; i < n; i++){ scanf("%d", &m); for(j = 0; j < m; j++){ scanf("%d%d", &x, &v); map[i][x-1] = v; } } Floyd(map, n); return 0; }Pascal :
var n,m,i,j,k,x,y,q,min,max:longint; a:array[0..101] of longint; f:array[0..101,0..101] of longint; p,d:boolean; begin readln(n); for i:=1 to n do begin read(m); for j:=1 to m do begin read(x,y); f[i,x]:=y; end; readln; end; for i:=1 to n do a[i]:=i; for i:=1 to n do for j:=1 to n do if i<>j then if (a[i]<>a[j]) and (f[i,j]>0) then begin q:=a[j]; for k:=1 to n do if a[k]=q then a[k]:=a[i]; end; q:=a[1]; for i:=2 to n do if a[i]<>q then begin p:=true; break; end; if p then begin writeln('disjoint'); halt; end; for i:=1 to n do for j:=1 to n do if f[i,j]=0 then f[i,j]:=1000000; for k:=1 to n do for i:=1 to n do for j:=1 to n do if (f[i,j]>f[i,k]+f[k,j]) and (f[i,k]+f[k,j]<>0) then f[i,j]:=f[i,k]+f[k,j]; min:=maxlongint; for i:=1 to n do begin max:=-maxlongint; for j:=1 to n do if i<>j then if (f[i,j]>max) and (f[i,j]<>0) then max:=f[i,j]; if max<min then begin min:=max; q:=i; end; end; writeln(q,' ',min); end.
- 1
信息
- ID
- 4216
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者