【POJ】2117 Electricity

无向图求割点和连通块。

 1 /* POJ2117 */
 2 #include <iostream>
 3 #include <vector>
 4 #include <algorithm>
 5 #include <cstdio>
 6 #include <cstring>
 7 #include <cstdlib>
 8 using namespace std;
 9
10 #define MAXN 10005
11
12 vector<int> vc[MAXN];
13 int low[MAXN], pre[MAXN];
14 int n, m;
15 int dfs_clock, ans, link;
16
17 void init() {
18     int i;
19
20     for (i=0; i<n; ++i)
21         vc[i].clear();
22
23     memset(pre, 0, sizeof(int)*n);
24     dfs_clock = ans = link = 0;
25 }
26
27 void tarjan(int u, int fa) {
28     int i, j, k, v;
29     int child = 0;
30     int cnt = 0;
31
32     pre[u] = low[u] = ++dfs_clock;
33     for (i=0; i<vc[u].size(); ++i) {
34         v = vc[u][i];
35         if (!pre[v]) {
36             ++child;
37             tarjan(v, u);
38             low[u] = min(low[u], low[v]);
39             if (low[v] >= pre[u]) {
40                 ++cnt;
41             }
42         } else if (pre[v]<pre[u] && v!=fa){
43             low[u] = min(low[u], pre[v]);
44         }
45     }
46     if (fa == -1) {
47         if (child > 1)
48             ans = max(ans, child-1);
49     } else {
50         ans = max(ans, cnt);
51     }
52 }
53
54 int main() {
55     int i, j, k;
56
57     #ifndef ONLINE_JUDGE
58         freopen("data.in", "r", stdin);
59         freopen("data.out", "w", stdout);
60     #endif
61
62     while (scanf("%d %d",&n,&m)!=EOF && (n||m)) {
63         if (m == 0) {
64             printf("%d\n", n-1);
65             continue;
66         }
67         init();
68         for (i=0; i<m; ++i) {
69             scanf("%d %d", &j, &k);
70             vc[j].push_back(k);
71             vc[k].push_back(j);
72         }
73         for (i=0; i<n; ++i) {
74             if (!pre[i]) {
75                 ++link;
76                 tarjan(i, -1);
77             }
78         }
79         printf("%d\n", ans+link);
80     }
81
82     return 0;
83 }
时间: 2025-01-15 00:17:12

【POJ】2117 Electricity的相关文章

【POJ】2278 DNA Sequence

各种wa后,各种TLE.注意若AC非法,则ACT等一定非法.而且尽量少MOD. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 #define MAXN 105 8 #define NXTN 4 9 10 char str[15]; 11 12 typedef struct Matrix {

【POJ】1739 Tony&#39;s Tour

http://poj.org/problem?id=1739 题意:n×m的棋盘,'#'是障碍,'.'是空白,求左下角走到右下角且走过所有空白格子的方案数.(n,m<=8) #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; #define BIT(a,b) ((a)<<((b)<<1)) #

【POJ】2449 Remmarguts&#39; Date(k短路)

http://poj.org/problem?id=2449 不会.. 百度学习.. 恩. k短路不难理解的. 结合了a_star的思想.每动一次进行一次估价,然后找最小的(此时的最短路)然后累计到k 首先我们建反向边,跑一次从汇到源的最短路,将跑出来的最短路作为估价函数h 根据f=g+h 我们将源s先走,此时实际价值g为0,估价为最短路(他们的和就是s-t的最短路) 将所有s所连的边都做相同的处理,加入到堆中(假设此时到达的点为x,那么x的g等于s到这个点的边权,因为根据最优,g+h此时是从x

【POJ】2318 TOYS ——计算几何+二分

TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10281   Accepted: 4924 Description Calculate the number of toys that land in each bin of a partitioned toy box. Mom and dad have a problem - their child John never puts his toys away w

【POJ】3009 Curling 2.0 ——DFS

Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11432   Accepted: 4831 Description On Planet MM-21, after their Olympic games this year, curling is getting popular. But the rules are somewhat different from ours. The game is

【POJ】1056 IMMEDIATE DECODABILITY

字典树水题. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 typedef struct Trie { 6 bool v; 7 Trie *next[2]; 8 } Trie; 9 10 Trie *root; 11 12 bool create(char str[]) { 13 int i = 0, id; 14 bool ret = false; 15 Trie *p = root

【POJ】2418 Hardwood Species

简单字典树. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define MAXN 128 6 7 typedef struct Trie { 8 int count; 9 Trie *next[MAXN]; 10 Trie() { 11 count = 0; 12 for (int i=0; i<MAXN; ++i) 13 next[i] = NULL; 14 } 15 }

【POJ】2513 Colored Sticks

字典树+并查集. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define MAXN 500005 6 #define MAXL 11 7 #define TRIEN 26 8 9 typedef struct Trie { 10 int v; 11 Trie *next[TRIEN]; 12 Trie() { 13 v = 0; 14 for (int i=0; i<TRI

【POJ】 2528 - Mayor&#39;s posters 【线段树+离散化】

题目: Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 47228   Accepted: 13719 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral