Advertisement
LuckThemAll

Untitled

Jan 17th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.36 KB | None | 0 0
  1. program project1;
  2.  
  3. {$mode objfpc}{$H+}
  4. type
  5.   Neighbor = record
  6.     S, F: integer;
  7.   end;
  8.  
  9. var
  10.   i, j, m, n, w1, w2, numStay, numAdd: Integer;
  11.   Chip: array of array of Boolean;
  12.   Visited: array of Boolean;
  13.   NeedAdd: array of Integer;
  14.   StayChip: array of Neighbor;
  15.  
  16. procedure dfs(v: integer);
  17. var
  18.   i: integer;
  19. begin
  20.   Visited[v] := True;
  21.   for i := 0 to High(Visited) do
  22.     if Chip[v][i] and not Visited[i] then begin
  23.       StayChip[numStay].S := v;
  24.       StayChip[numStay].F := i;
  25.       Inc(numStay);
  26.       dfs(i);
  27.     end;
  28. end;
  29.  
  30. begin
  31.   Assign(input, 'input.txt'); Reset(input);
  32.   Assign(output, 'output.txt'); Rewrite(output);
  33.   Read(n, m);
  34.   SetLength(Chip,  n, n);
  35.   SetLength(Visited, n);
  36.   SetLength(StayChip, n);
  37.   for i := 1 to m do begin
  38.     Read(w1, w2);
  39.     Chip[w1-1][w2-1] := true;
  40.     Chip[w2-1][w1-1] := true;
  41.   end;
  42.   dfs(0);
  43.   for i := 1 to High(Visited) do
  44.     if not Visited[i] then begin
  45.         dfs(i);
  46.       Inc(numAdd);
  47.       SetLength(NeedAdd, Length(NeedAdd) + 1);
  48.       NeedAdd[High(NeedAdd)] := i+1;
  49.     end;
  50.   WriteLn(numStay);
  51.   for i := 0 to High(StayChip) do
  52.     if StayChip[i].S <> StayChip[i].F then
  53.       WriteLn(StayChip[i].S+1, ' ', StayChip[i].F+1)
  54.     else Break;
  55.  
  56.   WriteLn(numAdd);
  57.   for i := 0 to High(NeedAdd) do
  58.     WriteLn(NeedAdd[i], ' ', 1);
  59.  
  60.  
  61.  
  62.   Close(input);
  63.   Close(output);
  64. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement