C 小y的旅行

小y的旅行

https://ac.nowcoder.com/acm/contest/7780/C

C 小y的旅行

先把两个都是的边用并查集连起来,再把含有的边进行判断,如果这俩本身连起来了,那么这俩就得拆开,。如果没有连起来,就让他们连起来。

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n,m,k,ans;
int fa[N],a[N],b[N];

inline void finit ()
{
    for(int i=1;i<=n;i++) fa[i]=i;
}
inline int find(int x) 
{
    if(fa[x] == x) return x;
    return fa[x] = find(fa[x]);
}
inline void join(int a,int b)
{
    int a1=find(a),b1=find(b);
    if(a1!=b1) fa[a1]=b1;
}

int main()
{
    cin>>n>>m>>k;
    finit();
    for(int i=1;i<=m;i++){
        cin>>a[i]>>b[i];
        if(a[i]>k && b[i]>k) join(a[i],b[i]);
    }
    for(int i=1;i<=m;i++){
        if(a[i]<=k || b[i]<=k){
            int u=find(a[i]);
            int v=find(b[i]);
            if (u==v) ans++;
            fa[u]=v;
        }
    }
    cout<<ans<<endl;
    return 0;
}
全部评论
大佬 为什么要先把都大于k的连起来,再去判断存在小于k的?
点赞 回复 分享
发布于 2020-10-08 17:17

相关推荐

不愿透露姓名的神秘牛友
07-09 12:05
点赞 评论 收藏
分享
06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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