mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-10-17 21:42:25 +00:00
feat: 添加P6279题解实现并查集功能
实现基于并查集的解决方案来处理图的连通性问题,包括合并操作和查找操作。代码包含输入处理和结果输出逻辑,但存在传递性问题需要后续修复。
This commit is contained in:
parent
c0d1a2f156
commit
eb451f8c09
46
src/9/30/P6279.cpp
Normal file
46
src/9/30/P6279.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
using ll = int64_t;
|
||||
#define sl static inline
|
||||
const ll maxn = 2e5+5;
|
||||
ll n,m,ny=1;
|
||||
ll f[maxn],ym[maxn],ys[maxn];
|
||||
|
||||
sl ll getf(ll a){
|
||||
if(f[a]==a)return a;
|
||||
return f[a]=getf(f[a]);
|
||||
}
|
||||
|
||||
sl bool isame(ll a,ll b){
|
||||
return getf(a)==getf(b);
|
||||
}
|
||||
|
||||
sl void merge(ll a,ll b){
|
||||
f[getf(a)]=getf(b);
|
||||
}
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
std::cin>>n>>m;
|
||||
for(ll i=1;i<=n;i++)f[i]=i;
|
||||
for(ll i=1;i<=m;i++){
|
||||
ll a,b;
|
||||
std::cin>>a>>b;
|
||||
if(ym[a]){
|
||||
merge(ym[a],b);
|
||||
}else{
|
||||
ym[a]=b;
|
||||
}
|
||||
}
|
||||
for(ll i=1;i<=n;i++){
|
||||
//TODO fix传递性问题
|
||||
if(!ys[getf(i)]){
|
||||
ys[getf(i)]=ny++;
|
||||
}
|
||||
std::cout<<ys[getf(i)]<<'\n';
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user