Codeforces 755C:PolandBall and Forest(并查集)

Posted Shadowdsp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 755C:PolandBall and Forest(并查集)相关的知识,希望对你有一定的参考价值。

http://codeforces.com/problemset/problem/755/C

题意:该图是类似于树,给出n个点,接下来p[i]表示在树上离 i 距离最远的 id 是p[i],如果距离相等则p[i]是 id 较小的点。

思路:一开始没什么想法,画几分钟图发现不到什么东西,后来想着 i 和 p[i] 有关系,那么就代表 i 和 p[i] 是属于同一棵树,那么不就是并查集了嘛。抱着试一试的心态搞了一下居然过了。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <string>
 7 #include <iostream>
 8 #include <stack>
 9 #include <map>
10 #include <queue>
11 #include <set>
12 using namespace std;
13 typedef long long LL;
14 #define N 100010
15 #define INF 0x3f3f3f3f
16 int fa[N], num[N];
17 
18 int Find(int x) {
19     if(x == fa[x]) return x;
20     return fa[x] = Find(fa[x]);
21 }
22 
23 void Merge(int x, int y) {
24     x = Find(x), y = Find(y);
25     if(x == y) return ;
26     fa[x] = y;
27 }
28 
29 int main()
30 {
31     int n;
32     scanf("%d", &n);
33     for(int i = 1; i <= n; i++) fa[i] = i;
34     for(int i = 1; i <= n; i++) scanf("%d", &num[i]);
35     for(int i = 1; i <= n; i++) {
36         Merge(i, num[i]);
37     }
38     int ans = 0;
39     for(int i = 1; i <= n; i++) if(fa[i] == i) ans++;
40     printf("%d\n", ans);
41     return 0;
42 }

 

以上是关于Codeforces 755C:PolandBall and Forest(并查集)的主要内容,如果未能解决你的问题,请参考以下文章

codeforces上怎么看测试数据

如何看codeforces做了多少题

codeforces上怎么看测试数据

codeforces比赛后怎么看题解和答案

codeforces是啥?

codeforces Codeforces 650A Watchmen