世界上有10种人,一种懂二进制,另一种|

仙帝-dream

园龄:3年5个月粉丝:11关注:3

CF659E

传送门

分析

得出:如果城市之间形成环,就有 00 个孤独城市

划重点

一个 visit(x)visit(x) ,利用并查集,读入一个点,如果已被标记在一个独立的环当中,标记为 11 。

否则,就合并。

分析

画图发现:如果一个城市已经在一个环里,那另一个直接加入到里面就可以了

关键

  • 并查集来找环。

ACcode(注释版):

```cpp
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>

using namespace std;

int n,m,ans,father[100005],x,y;
bool visit[100005];


//查找父亲
int ss(int x){
return x==father[x]?x:father[x]=ss(father[x]);
}

int main(){
scanf("%d%d",&n,&m);

for(int i=1;i<=n;i++){
//初始化
father[i]=i;
//每个节点的父亲设为自己
}

for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);

int tx=ss(x);
int ty=ss(y);

if(tx==ty){//如果父亲一样 (表示两个城市之间联通)
visit[tx]=true;
continue;
}

father[tx]=ty; //(联通城市)使父节点统一

// 若之前已找到过环,就把父亲节点标记为1
if(visit[tx]||visit[ty]){visit[ty]=true;}
}

for(int i=1;i<=n;i++){
if(ss(i)==i&&!visit[i]){ // 满足ss(i)==i的点是父亲节点,另一个就是一颗单独的树。
ans++;
}
}
printf("%d",ans);
return 0;
}

 

posted @   仙帝-dream  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起