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;
}
本文来自博客园,作者:仙帝-dream,转载请注明原文链接:https://www.cnblogs.com/yyds123/p/15776911.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?