Harmonious Graph

D. Harmonious Graph

好后悔在写这个题之前浪费了几分钟时间,不然我就写出来了....

因为他就是连通块之间的合并问题,所以就用并查集就好了

复杂度好像也只是线性的吧...

然后就A了

代码:

// Created by CAD on 2019/12/4.
#include <bits/stdc++.h>
using namespace std;

const int maxn=2e5+5;
int f[maxn];
int find(int x)
{
    return x==f[x]?x:f[x]=find(f[x]);
}
int last[maxn];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,m;    cin>>n>>m;
    for(int i=1;i<=n;++i)
        f[i]=i;
    for(int i=1,u,v;i<=m;++i)
    {
        cin>>u>>v;
        int f1=find(u),f2=find(v);
        if(f1!=f2)
            f[f1]=f2;
    }
    int ans=0;
    for(int i=1;i<=n;++i)
    {
        int t=find(i);
        if(last[t])
        {
            for(int j=last[t]+1;j<i;j++)
            {
                int temp=find(j);
                if(temp!=t)
                    f[temp]=t,ans++;
            }
        }
        last[t]=i;
    }
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
明天不下雨了_人机版:让我们大声的说出来:以前的未来就是现在
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务