zoukankan      html  css  js  c++  java
  • POJ 3177

    POJ 3177

    题目大意:同poj 3352。

    解:同poj3352,但记得处理重边的问题。

    View Code
      1 //poj 3177
    2 const
    3 maxn=5111;
    4 maxm=11111;
    5 type
    6 data=record
    7 dest, next, op: longint;
    8 end;
    9 var
    10 edge: array[1..maxm*2]of data;
    11 pre, dfn, low, deg, vect: array[1..maxn]of longint;
    12 g: array[1..maxn, 1..maxn]of boolean;
    13 visit:array[1..maxn]of boolean;
    14 n, m, time, tot, ans: longint;
    15 procedure add(x, y: longint);
    16 begin
    17 inc(tot);
    18 with edge[tot] do begin
    19 dest := y;
    20 next := vect[x];
    21 vect[x] := tot;
    22 op := tot + 1;
    23 end;
    24 inc(tot);
    25 with edge[tot] do begin
    26 dest := x;
    27 next := vect[y];
    28 vect[y] := tot;
    29 op := tot - 1;
    30 end;
    31 end;
    32
    33 procedure init;
    34 var
    35 i, x, y: longint;
    36 begin
    37 tot := 0; ans := 0;
    38 fillchar(vect, sizeof(vect), 0);
    39 fillchar(g, sizeof(g), 0);
    40 readln(n, m);
    41 for i := 1 to m do begin
    42 readln(x, y);
    43 if not g[x, y] then begin
    44 add(x, y);
    45 g[x, y] := true;
    46 g[y, x] := true;
    47 end;
    48 end;
    49 end;
    50
    51 procedure tarjan(x: longint);
    52 var
    53 i: longint;
    54 begin
    55 inc(time);
    56 dfn[x] := time; low[x] := time;
    57 visit[x] := true;
    58 i := vect[x];
    59 while i<>0 do
    60 with edge[i] do begin
    61 if (pre[x]<>dest) then
    62 if (dfn[dest]=0) then begin
    63 pre[dest] := x;
    64 tarjan(dest);
    65 pre[dest] := 0;
    66 if (low[dest]<low[x]) then low[x] := low[dest];
    67 end
    68 else if visit[dest] then begin
    69 if (dfn[dest]<low[x]) then low[x] := dfn[dest];
    70 end;
    71 i := next;
    72 end;
    73 visit[x] := false;
    74 end;
    75
    76 procedure main;
    77 var
    78 i, u: longint;
    79 begin
    80 fillchar(dfn, sizeof(dfn), 0);
    81 fillchar(pre, sizeof(pre), 0);
    82 fillchar(visit, sizeof(visit), 0);
    83 time := 0;
    84 for i := 1 to n do if dfn[i]=0 then tarjan(i);
    85 fillchar(deg, sizeof(deg), 0);
    86 for u := 1 to n do begin
    87 i := vect[u];
    88 while i<>0 do
    89 with edge[i] do begin
    90 if (low[u]<>low[dest]) then begin
    91 inc(deg[low[u]]);
    92 inc(deg[low[dest]]);
    93 end;
    94 i := next;
    95 end;
    96 end;
    97 for i := 1 to time do
    98 if deg[i] >> 1 = 1 then inc(ans);
    99 if ans = 1 then ans := 0;
    100 ans := (ans + 1) >> 1;
    101 end;
    102
    103 procedure print;
    104 begin
    105 writeln(ans);
    106 end;
    107
    108 begin
    109 assign(input,'1.txt'); reset(input);
    110 while not seekeof do begin
    111 init;
    112 main;
    113 print;
    114 end;
    115 end.



  • 相关阅读:
    10.28MySQL的介绍和安装
    10.24 Event事件,进程池与线程池,协程
    10.23GIL全局解释器锁,多线程作用,死锁,递归锁,信号量
    10.22进程互斥锁,队列,堆栈,线程
    10.21 操作系统发展史,进程
    10.18(粘包问题与解决方法,UDP,socketserver)
    day 67小结
    day 67作业
    day 66 小结
    day 66作业
  • 原文地址:https://www.cnblogs.com/wmzisfoolish/p/2435189.html
Copyright © 2011-2022 走看看