さいたんらくけいさん

3267 ワード

Description
1つの無方向図には、自己ループがなく、すべてのエッジの重み値が1であり、1つの点対(a,b)に対して、すべてのaとbの間の最も短絡的な点の合計個数を出力します.
Input
第1行n,mはn個の点を表し,m辺は次のm行,各行2個の数a,bはa,bの間に次の数pがあることを示し,問題の数は次のp行,各行2個の数a,bは質問a,bを表す
Output
各問合せについて、1つの数cが出力され、a,b間の最も短絡した上点の合計数を表す
Sample Input
5 6 1 2 1 3 2 3 2 4 3 5 4 5 3 2 5 5 1 2 4 Sample Output
4 3 2 Hint
範囲:n<=100,p<=5000
コード:
var
  a:array[0..200,0..200] of longint;
  n,m,z,x,y,i,j,k,sum:longint;
begin
  readln(n,m);
  for i:=1 to n do
    for j:=1 to n do
      a[i,j]:=10000000;
  for i:=1 to m do
    begin
      readln(x,y);
      a[x,y]:=1;
      a[y,x]:=1;
    end;
  for k:=1 to n do
    for i:=1 to n do
      for j:=1 to n do
        if (i<>j)and(i<>k)and(j<>k) then
          if a[i,j]>a[i,k]+a[k,j] then
            begin
              a[i,j]:=a[i,k]+a[k,j];
            end;
  readln(z);
  for i:=1 to z do
    begin
      sum:=0;
      readln(x,y);
      for j:=1 to n do
        if a[x,j]+a[j,y]=a[x,y] then
          if (x<>j)and(j<>y) then
            inc(sum);
      writeln(sum+2);
    end;
end.