D - Harmonious Graph(并查集)(此题需补)

Posted aaazhuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D - Harmonious Graph(并查集)(此题需补)相关的知识,希望对你有一定的参考价值。

题意:一共n个点,m条线

若点a连通点b  则对于任何a<c<b,a均与b连通,若不连通,则你需要加边上去

问你需要加多少条边

采用并查集是因为 对于所有小于b并且与b连通的a  均用并查集代替

而其中一个点并查集不等于最大的b时 就需要加边上去  ans++

#include<iostream>
#include<map>
#include<algorithm>
#include<set>
using namespace std;
const int maxn = 2e5+10;

int f[maxn];
int n,m;


int Find(int x)
{
    if(f[x]==x) return x;
    f[x]=Find(f[x]);
    return f[x];
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)    f[i]=i;
    while(m--)
    {
        int x,y,fx,fy;
        cin>>x>>y;
        fx=Find(x);
        fy=Find(y);
        if(fx>fy) swap(fx,fy);
        f[fx]=fy;
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        int x=Find(i);
        while(i<x)
        {
            int y=Find(i);
            if(x!=y)
            {
                ans++;
                if(x<y) swap(x,y);
                f[y]=x;
            }
            i++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

  

以上是关于D - Harmonious Graph(并查集)(此题需补)的主要内容,如果未能解决你的问题,请参考以下文章

2021杭州多校第一场KD-Graph(思维+并查集)

2021杭州多校第一场KD-Graph(思维+并查集)

[hdu 5354] Bipartite Graph 分治 并查集

UOJ_14_UER #1DZY Loves Graph_并查集

2015多校第6场 HDU 5354 Bipartite Graph CDQ,并查集

Bipartite Graph hdu 5313 bitset 并查集 二分图