20多天没写题啊。。。连键盘长什么样都忘了额。。。

用这道并查集水题练手2333

 

 1 /**************************************************************
 2     Problem: 1370
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:36 ms
 7     Memory:816 kb
 8 ****************************************************************/
 9  
10 #include <cstdio>
11 #include <algorithm>
12  
13 using namespace std;
14 const int N = 1005;
15  
16 int n, m, ans;
17 int fa[N << 1], a[N];
18  
19 int read() {
20   int x = 0;
21   char ch = getchar();
22   while (ch < '0' || '9' < ch)
23     ch = getchar();
24   while ('0' <= ch && ch <= '9')
25     (x *= 10) += ch - '0', ch = getchar();
26   return x;
27 }
28  
29 int find_fa(int x) {
30   return x == fa[x] ? x : fa[x] = find_fa(fa[x]);
31 }
32  
33 int main() {
34   int i, x, y;
35   char st[5];
36   n = read(), m = read();
37   for (i = 1; i <= n * 2; ++i) fa[i] = i;
38   for (i = 1; i <= m; ++i) {
39     scanf("%s", st);
40     x = read(), y = read();
41     if (st[0] == 'F')
42       fa[find_fa(x)] = find_fa(y);
43     else fa[find_fa(x)] = find_fa(y + n), fa[find_fa(y)] = find_fa(x + n);
44   }
45   for (i = 1; i <= n; ++i)
46     a[i] = find_fa(i);
47   sort(a + 1, a + n + 1);
48   for (i = 1; i <= n; ++i)
49     if (a[i] == 1 || a[i] != a[i - 1])
50       ++ans;
51   printf("%d\n", ans);
52   return 0;
53 }
View Code

 

posted on 2015-01-27 19:13  Xs酱~  阅读(339)  评论(2编辑  收藏  举报