当前位置: 首页 > news >正文

1013 Battle Over Cities(比较好的一题)

本题传送门

解题思路

这题与天梯赛L2-013几乎一样。

就是计算连通块的数量,这里我刚开始直接看acwing的翻译题,但是acwing上的题目擅自加了一个条件:初始时所有城市连通。然而在acwing上ac的代码

在PAT上WA了,因为PAT上没有这个条件。

攻下一座城市之后,为了让所有城市连通,只需要在每个连通块之间建立一条边,答案就是最后算出来的连通块数量减1。

有两种方法,一种是dfs,一种是并查集
这里值得注意的一点是:并查集有两种写法
if(p[x] != x) return find(p[x]);
或者
if(p[x] != x) p[x] = find(p[x]);

前者是单纯的递归,后者是路径压缩,后者在find的过程中将路中的所有点都归在了根节点之下,这样find效率更高,速度更快,前者容易超时。

ac✅️代码

算法一 : dfs

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;vector<int> mp[1010];
bool vis[1010];
bool lost[1010];
int ans ;
int n,m,k;
void dfs(int u)
{vis[u] = true;for(int v : mp[u]){if(!vis[v] && !lost[v]){dfs(v);}}
}int cnt(int tar)
{int res = 0;for(int i = 1 ; i <=  n ; i ++){if(!vis[i] && !lost[i]){res ++;dfs(i);}}memset(vis,0,sizeof vis);    return res;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m>>k;for(int i = 0 ; i < m ; i++){int a,b;cin>>a>>b;mp[a].push_back(b);mp[b].push_back(a);}for(int i = 0 ; i < k ; i++){       int tar; cin>>tar;vis[tar] = true;lost[tar] = true;int cnt1 = cnt(tar);lost[tar] = false;//只有一个被标记了,不必用memset,手动恢复一下就好cout<<cnt1 - 1<<endl;}return 0;   
}

算法二 : dsu

#include<iostream>
#include<algorithm>
using namespace std;const int M = 500 * 999 , N = 1010;int p[N];
struct edge{int a,b;
}e[M];//建边int find(int x)
{if( p[x] != x) p[x] = find(p[x]);//路径压缩return p[x];
}int main()
{int n,m,k;cin>>n>>m>>k;for(int i = 0 ; i < m ; i ++){cin>>e[i].a >> e[i].b;}for(int i = 0 ; i < k ; i ++){int x;cin>>x;for(int i = 1 ; i <= n ; i ++) p[i] = i;int cnt = n-1;for(int i = 0 ; i < m ; i ++){int a = e[i].a;int b = e[i].b;if( a!=x && b!=x )//跳过有x的边{int pa = find(a);int pb = find(b);//这里合并的时候可以统一让小的成为根,但是本题也没有这个必要,我们的目的只是想要知道连通块的数量if(pa != pb){cnt--;p[pa] = pb;}}}cout<<cnt - 1 <<endl;}return 0;	
}
http://www.jsqmd.com/news/586725/

相关文章:

  • 二分边界防止循环
  • 探寻ROHS2.0检测仪适合哪些行业使用,生产商哪家靠谱 - myqiye
  • 终极Dlib预编译包指南:高效解决Windows环境安装难题
  • STC15F2K60S2单片机最小系统板DIY指南:从选件到焊接,一次点亮
  • 杭州高端腕表鉴定真假全攻略:30+奢华品牌防伪解析、地域案例与6城服务对比 - 时光修表匠
  • 分析rohs2.0检测仪厂商哪家好,分享价格区间和品牌推荐 - mypinpai
  • B站Windows客户端高效解决方案:告别浏览器困扰,打造专业视频体验平台
  • 秒传技术突破:如何让文件分享效率提升10倍的底层逻辑与实践指南
  • 猫抓资源嗅探插件:三步搞定网页视频下载的完整指南
  • 消息队列发送消息场景分析
  • 【C++】muduo接口补充
  • mysql如何查看正在执行的DDL操作_Processlist查看进程
  • Qwen3-ASR-0.6B在嵌入式Linux设备上的部署与优化实践
  • 书匠策AI:论文写作界的“智能导航仪”,引领期刊论文创作新风尚
  • 深度掌握Dify代码节点:从实战到精通的完整指南
  • 抖音批量下载终极教程:3分钟掌握视频合集自动化保存
  • 说说哈尔滨口碑好的公考培训专业机构哪家靠谱 - 工业推荐榜
  • STM32CubeMX使用9 配置Time4 PWM(DMA)输出
  • 智能EFI构建:OpCore-Simplify如何重构黑苹果配置流程
  • BiliTools智能视频总结:高效提取B站视频知识精华的全指南
  • 如何解决网盘限速难题?开源工具让下载效率提升300%
  • 杭州高端腕表真假鉴定全解:六大城市 37 大品牌防伪要点、专业流程与市场风险深度科普(附 2026 行业数据) - 时光修表匠
  • Visual C++ Redistributable AIO:开源项目运行时依赖管理一站式解决方案
  • 共话靠谱的安全鞋生产厂家,湖北性价比高的安全鞋怎么选 - 工业品牌热点
  • 用阿里百炼+Qwen-VL快速搭建多模态AI助手:图片描述生成与API调用指南
  • 告别风扇噪音:Fan Control的智能调节散热方案
  • 亲测实用!6款覆盖全职业阶段的专业简历模板平台合集
  • 探秘书匠策AI“论文魔法盒”:解锁期刊论文全流程秘籍
  • 如何用douyin-downloader在3分钟内解决抖音内容批量保存难题
  • 我们这些程序员在人工智能时代注定要失败吗?(一位穷困潦倒的计算机科学系学生)