-
Notifications
You must be signed in to change notification settings - Fork 0
/
КПК.lpr
70 lines (62 loc) · 1.36 KB
/
КПК.lpr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
program project1;
{$mode objfpc}{$H+}
type
Neighbor = record
S, F: integer;
end;
var
i, j, m, n, w1, w2, numStay, numAdd: integer;
Chip: array of array of boolean;
Visited: array of boolean;
NeedAdd: array of integer;
StayChip: array of Neighbor;
procedure dfs(v: integer);
var
i: integer;
begin
Visited[v] := True;
for i := 0 to High(Visited) do
if Chip[v][i] and not Visited[i] then
begin
StayChip[numStay].S := v;
StayChip[numStay].F := i;
Inc(numStay);
dfs(i);
end;
end;
begin
Assign(input, 'input.txt');
Reset(input);
Assign(output, 'output.txt');
Rewrite(output);
Read(n, m);
SetLength(Chip, n, n);
SetLength(Visited, n);
SetLength(StayChip, n);
for i := 1 to m do
begin
Read(w1, w2);
Chip[w1 - 1][w2 - 1] := True;
Chip[w2 - 1][w1 - 1] := True;
end;
dfs(0);
for i := 1 to High(Visited) do
if not Visited[i] then
begin
dfs(i);
Inc(numAdd);
SetLength(NeedAdd, Length(NeedAdd) + 1);
NeedAdd[High(NeedAdd)] := i + 1;
end;
WriteLn(numStay);
for i := 0 to High(StayChip) do
if StayChip[i].S <> StayChip[i].F then
WriteLn(StayChip[i].S + 1, ' ', StayChip[i].F + 1)
else
Break;
WriteLn(numAdd);
for i := 0 to High(NeedAdd) do
WriteLn(NeedAdd[i], ' ', 1);
Close(input);
Close(output);
end.