关于背景的介绍见1013 Battle Over Cities(图的DFS解法)

DFS就是不算特定结点后数连通子图的总数,再减一。我想着那么并查集就是数不算特定节点后,集合元素(根)的个数。但是我弄错了一件事,我是边输入,边合并,然后对于每一个占领城市的输入,再绕过那座城市,这样是会出问题的,因为被占领城市很可能被算作了根节点。

正确做法是:依然设置一个邻接表,对于每个占领城市的输入,绕开它把其他存在边的结点合并,再数集合元素的个数,最后减一。

AC代码

#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#include<cmath>
typedef long long LL;using namespace std;const int maxn = 1010;//总城市数上限 int allCityNum,lostIdx;vector<int> G[maxn];int F[maxn];void initF(){for(int i=1;i<=allCityNum;i++)F[i] = i;
} int findSo(int x){int a = x;while(x!=F[x]){x = F[x];}while(a!=F[a]){int z = a;a = F[a];F[z] = x;}return x;
}void unite(int a,int b){int sa = findSo(a);int sb = findSo(b);if(sa!=sb){F[sa] = sb;}
}int main(){int wayNum,lostCityNum;scanf("%d %d %d",&allCityNum,&wayNum,&lostCityNum);for(int i=0;i<wayNum;i++){int ct1,ct2;scanf("%d %d",&ct1,&ct2);G[ct1].push_back(ct2);G[ct2].push_back(ct1);}set<int> roots;for(int i=0;i<lostCityNum;i++){scanf("%d",&lostIdx);initF();roots.clear();for(int j=1;j<=allCityNum;j++){if(j==lostIdx)continue;for(int k=0;k<G[j].size();k++){int u = G[j][k];if(u!=lostIdx)unite(j,u);} }for(int j=1;j<=allCityNum;j++){if(j!=lostIdx){int sj = findSo(j);roots.insert(sj);}}printf("%d\n",roots.size()-1);}return 0;
}

1013 Battle Over Cities(并查集解法)相关推荐

  1. 1013 Battle Over Cities(图的DFS解法)

    这题的背景是战争年代,假如城市1被占领,那么所有和城市1相关的公路都要被炸毁,但是这样一来,2和3就不连通了,所以需要补修一条23之间的公路.但是换做城市2或3被占领,1和另一座城市是联通的,并不需要 ...

  2. PAT甲级1013 Battle Over Cities:[C++题解]并查集、结构体存边

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:并查集题目. 不清楚并查集的小伙伴,请移步并查集原理并查集板子:acwing836. 合并集合. 题意:给定一个连通图,当删掉任意1个 ...

  3. PAT (Advanced Level) Practise 1013. Battle Over Cities (25)

    1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  4. 1013. Battle Over Cities (25) 连通图

    1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  5. 【小米笔试题】朋友圈问题-并查集解法

    2016年小米校招笔试第三题(西安站) 3 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共 ...

  6. POJ 1182 食物链 (并查集解法)(详细注释)

    食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78510 Accepted: 23396 Description 动物王 ...

  7. HDU - 2874 Connections between cities(并查集+LCA)

    题目链接:点击查看 题目大意:给出n个点代表城市,再给出m条边将其连接,每条边都有边权,题目保证给出的图无环,现在给出两个点,首先询问两个点是否互相连通,若可以连通,询问两点之间的距离 题目分析:判断 ...

  8. 【解析】1013 Battle Over Cities (25 分)_31行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 It is vitally important to have all the cities connected by highw ...

  9. 1013 Battle Over Cities (25分)(用割点做)

    仅以此题纪念脑瘫的我.好吧看见1000的范围没有多想什么,直接跑了一遍tarjan,md其实暴力就可以...乌鱼子 题解: tarjan记录割点能把图分成几个. tarjan可以适用于1e5数量级别的 ...

最新文章

  1. [翻译]现代Linux系统上的栈溢出攻击【转】
  2. 软件工程—让软件包自带commit id
  3. 微服务把多个模块服务 聚合成一个服务
  4. 理解委托的两类必要方法
  5. 魔兽世界架设 mysql_魔兽世界单机版局域网的架设方法
  6. 计算机操作系统学习之信号量机制
  7. Oracle执行计划变更
  8. 程序设计思维与实践 Week15 作业
  9. 拳皇世界服务器维护,拳皇世界3月1日更新维护公告 多组服务器开启数据互通[图]...
  10. 请你根据微信登录界面设计测试用例
  11. AUTO_ACKNOWLEDGE和CLIENT_ACKNOWLEDGE
  12. java中singleton_java中singleton的几种实现方式
  13. python中的date的含义_浅谈python中的dateime
  14. java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解
  15. 解决hadoop损失文件删除后出现DEPRECATED: Use of this script to execute hdfs command is deprecated.
  16. 同步电路和异步电路的区别
  17. 如何使用WordPress建立亚马逊会员商店
  18. 马斯克畅想的“超级高铁”物理上可行,但面临三大工程挑战
  19. 美国福禄克公司于2021年1月重磅发布两款红外热像仪——TiS55+和TiS75+
  20. 软件流水和循环展开的区别

热门文章

  1. 图解5G NR帧结构
  2. Android组件框架:Android组件管理者ActivityManager
  3. 零基础自学用Python 3开发网络爬虫(一)
  4. 总结六条对我们学习Linux系统有用的忠告
  5. linux源码包卸载方式
  6. 才知道百度也提供了智能DNS服务 - 加速乐
  7. hibernate.cfg.xml详细配置
  8. VS 2010中对WPF4有哪些多点触摸支持?
  9. 完全隐藏Master Page Site Actions菜单只有管理员才可以看见
  10. jQuery之替换节点