[TIOJ] 1312 家族

LINK:http://tioj.infor.org/problems/1312
  很水的disjoint set,合併時由大的併到小的之下的,不過我漏看了有連續輸入這項WA了好多次QQ

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,k;
class DSU{
    private:
        vector<int> fa,sz;
    public:
        void init(int n)
        {
            fa.resize(n+1), sz.resize(n+1,1);
            for(int i = 0; i <= n; i++) fa[i] = i;
        }
        int find(int x)
        {
            return (x==fa[x])?x:fa[x]=find(fa[x]);
        }
        bool same(int x,int y)
        {
            return find(x)==find(y);
        }
        void unite(int x,int y)
        {
            if(same(x,y)) return;
            if(find(x) > find(y) ) swap(x,y);
            fa[find(y)] = find(x);
            sz[find(x)] += sz[find(y)];
        }
}dsu;
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);
    while(cin >> n >> m)
    {
        dsu.init(n);
        while(m--)
        {
            cin >> a >> b;
            dsu.unite(a,b);
        }
        cin >> k;
        cout << dsu.find(k) << '\n';
    }
}

留言

這個網誌中的熱門文章

Shellshock.io從入門到上手(針對單狙)(沒有圖片、影片版本)

[TIOJ] 1007燈泡問題