美文网首页
算法模板(四)并查集

算法模板(四)并查集

作者: 影踪派熊猫人武僧 | 来源:发表于2018-11-07 21:17 被阅读0次

并查集

#include<bits/stdc++.h>
#define maxn 3000
using namespace std;
inline char get(){
    static char buf[30],*p1=buf,*p2=buf;
    return p1==p2 && (p2=(p1=buf)+fread(buf,1,30,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
    register char c=get();register int f=1,_=0;
    while(c>'9' || c<'0')f=(c=='-')?-1:1,c=get();
    while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=get();
    return _*f;
}
int n,m;
int fa[maxn];
inline void init(){
    for(register int i=0;i<=n;i++)fa[i]=i;
}
int get(int x){
    if(x==fa[x])return x;
    return get(fa[x]);
}
inline void merge(int x,int y){
    x=get(x);
    y=get(y);
    if(x!=y)fa[y]=x;
}
int a,b;
int main(){
    n=read();m=read();
    init();
    for(register int i=0;i<m;i++)merge(read(),read());
    return 0;
}

路径压缩并查集

#include<bits/stdc++.h>
#define maxn 3000
using namespace std;
inline char get(){
    static char buf[30],*p1=buf,*p2=buf;
    return p1==p2 && (p2=(p1=buf)+fread(buf,1,30,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){
    register char c=get();register int f=1,_=0;
    while(c>'9' || c<'0')f=(c=='-')?-1:1,c=get();
    while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=get();
    return _*f;
}
int n,m;
int fa[maxn];
inline void init(){
    for(register int i=0;i<=n;i++)fa[i]=i;
}
int get(int x){
    if(x==fa[x])return x;
    return fa[x]=get(fa[x]);
}
inline void merge(int x,int y){
    x=get(x);
    y=get(y);
    if(x!=y)fa[y]=x;
}
int a,b;
int main(){
    n=read();m=read();
    init();
    for(register int i=0;i<m;i++)merge(read(),read());
    return 0;
}

相关文章

  • 算法模板(四)并查集

    并查集 路径压缩并查集

  • 从并查集Union Find算法谈算法解决实际问题的过程

    从并查集Union Find算法谈算法解决实际问题的过程算法并查集算法寻找路径 从并查集Union Find算法谈...

  • 并查集练习

    并查集 参考《算法笔记》 三要素:并,查,集。 并差集与一个算法有关,kruskal算法,就可通过并查集实现。 1...

  • 模板

    并查集模板

  • LeetCode 分类刷题 —— Union Find

    Union Find 的 Tips: 灵活使用并查集的思想,熟练掌握并查集的模板,模板中有两种并查集的实现方式,一...

  • 深入理解并查集

    并查集是一种树形结构,它是由并查集算法进行维护的。而并查集算法(Union-find-algorithm),顾名思...

  • 并查集入门使用

    本文参考自《算法笔记》并查集篇 并查集的定义 什么是并查集?并查集可以理解为是一种维护数据集合的结构。名字中并查集...

  • 模板

    并查集 拓扑排序 Floyd算法 Dijkstra算法

  • 并查集模板

    以PAT甲级1114为例,写了个并查集模板,记录下来。题目就不列了,感兴趣去官网找一下

  • 并查集模板

网友评论

      本文标题:算法模板(四)并查集

      本文链接:https://www.haomeiwen.com/subject/mzjbxqtx.html