zoukankan      html  css  js  c++  java
  • 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
    ", ans);
    41     return 0;
    42 }
  • 相关阅读:
    相关正则的一些知识
    数组中的方法
    封装ajax
    swiper结合ajax的轮播图
    事件
    原型、原型链
    HTML 常用标签
    HTML基础了解
    JSON 与 XML基本了解
    JavaScript(js)
  • 原文地址:https://www.cnblogs.com/fightfordream/p/6291508.html
Copyright © 2011-2022 走看看