雖然有一點煩(連續輸入我看漏了),但只是裸裸的dsu題(模板+1/0)
據說我是題目連結(? 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';
}
}
- 本文連結:https://blog.subarya.me/2018/12/19/TIOJ%201312%20%E5%AE%B6%E6%97%8F/
- 版權聲明:本Blog所有文章除了特別聲明外,均默認採用 許可之協議。