VCOLDWAT - Nước lạnh

Tác giả: ll931110

Ngôn ngữ: Pascal

Program VCOLDWAT;
        Const
                input  = '';
                output = '';
        Var
                x,y,z,head,adj,trace: array[1..100000] of longint;
                                root: array[1..100000] of boolean;
                                 n,c: longint;

Procedure init;
          Var
                f: text;
                i: longint;
          Begin
                Fillchar(head, sizeof(head), 0);
                Fillchar(root, sizeof(root), true);

                Assign(f, input);
                        Reset(f);

                Readln(f, n, c);
                For i:= 1 to c do
                        Begin
                                Readln(f, x[i], y[i], z[i]);
                                head[x[i]]:= head[x[i]] + 2;
                        End;
                Close(f);

                For i:= 2 to n do head[i]:= head[i] + head[i - 1];
                head[n + 1]:= 2 * c;

                For i:= 1 to c do
                        Begin
                                adj[head[x[i]]]:= y[i];
                                dec(head[x[i]]);
                                root[y[i]]:= false;

                                adj[head[x[i]]]:= z[i];
                                dec(head[x[i]]);
                                root[y[i]]:= false;
                        End;
          End;

Procedure DFS(u: longint);
          Var
                v: longint;
          Begin
                For v:= head[u] + 1 to head[u + 1] do
                        if trace[adj[v]] = 0 then
                                Begin
                                        trace[adj[v]]:= trace[u] + 1;
                                        DFS(adj[v]);
                                End;
          End;

Procedure solve;
          Var
                  f: text;
                i,k: longint;
          Begin
                For i:= 1 to n do if root[i] then
                        Begin
                                k:= i;
                                break;
                        End;

                trace[k]:= 1;
                DFS(k);

                Assign(f, output);
                        Rewrite(f);
                        For i:= 1 to n do writeln(f, trace[i]);
                Close(f);
          End;

Begin
        init;
        solve;
End.

Download