[TIOJ] 1312 家族
LINK:http://tioj.infor.org/problems/1312
很水的disjoint set,合併時由大的併到小的之下的,不過我漏看了有連續輸入這項WA了好多次QQ
很水的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'; } }
留言
張貼留言