[TIOJ] 1312.家族
雖然有一點煩(連續輸入我看漏了),但只是裸裸的dsu題(模板+1/0)
據說我是題目連結(? https://tioj.ck.tp.edu.tw/problems/1312
據說我是題目連結(? https://tioj.ck.tp.edu.tw/problems/1312
#pragma gcc optimize("o2") #include<bits/stdc++.h> #define int long long int #define IOS ios_base::sync_with_stdio(false) #define TO cin.tie(NULL) using namespace std; struct disjointset { int mem[10005],rank[10005]; void init(int num) { for(int i=0;i<=num;i++)
{
mem[i]=i;
rank[i]=0;
}
} int find(int N) { if(mem[N]==N) return N;
return mem[N]=find(mem[N]);
} int same(int a,int b) { return find(a)==find(b);
} void Union(int l,int r) { if(!same(l,r))
{
if(find(l)<find(r)) swap(l,r);
mem[find(l)]=find(r);
rank[find(l)]+=find(r);
}
} }; signed main() { IOS;TO; int n,m,a,b,k; struct disjointset dsu; while(cin >> n >> m) { dsu.init(n);
for(int i=0;i<m;i++)
{
cin >> a >> b;
dsu.Union(a,b);
}
cin >> k; cout << dsu.find(k) <<'\n'; } }
留言
張貼留言