SSL2542 2016提高组模拟试题 皮皮(并查集)
来源:互联网 发布:软件项目管理论文 编辑:程序博客网 时间:2024/06/04 17:44
2016提高组模拟试题 皮皮
Description
皮皮通过一次聚会认识了n个妹子。经过仔细的研究皮皮发现了一个有趣的现象:那就是有m对妹子是互相认识的。然而如果两个妹子直接或间接地认识(A认识B,B认识C,则A认识C),那么皮皮就只能在这两个妹子里面选一个来泡。
然而空空空空的皮皮想要泡到尽量多的妹子,于是皮皮就开始采取了一系列的行动:每次让两个妹子绝交。作为皮皮的路鸣泽的你需要在每次皮皮采取行动后告诉皮皮现在他最多能泡多少个妹子。
Input
第一行两个整数 n 和 m。
接下来 m 行每行两个整数表示这两个妹子互相认识。保证无重边无自环。
接下来一个整数q表示皮皮采取了q次行动。
接下来q行每行一个整数x表示皮皮成功让第x对(按输入顺序)认识的妹子绝交了。
Output
输出有q+1行每行一个整数表示当前皮皮最多可以泡多少个妹子。第一个整数表示皮皮在采取行动之前能泡多少个妹子。
Sample Input
4 4
1 2
2 3
3 4
4 1
3
1
2
3
Sample Output
1
1
2
3
Hint
【数据范围与约定】
对于30%的数据 n<=100,m<=200
对于60%的数据 n<=1000,m<=2000
对于100%的数据 n<=100000,m<=200000,q<=m,数据保证无两条相同的边。
分析:从后面倒着加入并查集就行了。
代码
#include <cstdio>#define N 200000using namespace std;int f[N],x[N],y[N],a[N],n,m;bool vis[N];int find(int x){ if (f[x]==x) return x; return f[x]=find(f[x]);}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) scanf("%d%d",&x[i],&y[i]); for (int i=1;i<=n;i++) f[i]=i; int p[N],q; scanf("%d",&q); for (int i=1;i<=q;i++) { scanf("%d",&p[i]); vis[p[i]]=true; } for (int i=1;i<=m;i++) if (!vis[i]) f[find(x[i])]=find(y[i]); bool v[N]; int ans=0; for (int i=1;i<=n;i++) if (!v[find(i)]) { ans++; v[find(i)]=true; } a[q+1]=ans; for (int i=q;i>=1;i--) { int u=find(x[p[i]]); int v=find(y[p[i]]); if (u!=v) { a[i]=--ans; f[u]=v; } else a[i]=ans; } for (int i=1;i<=q+1;i++) printf("%d\n",a[i]);}
阅读全文
0 0
- SSL2542 2016提高组模拟试题 皮皮(并查集)
- SSL2505 2015年NOIP提高组试题 信息传递(并查集,最小环)
- NOIP2010提高组 关押罪犯(并查集)
- 2016年提高组模拟试题(20161105)Mahjong
- 2016年提高组模拟试题(20161105) 方程式
- SSL2560 2016年提高组模拟试题 连锁店(贪心)
- 2016年提高组模拟试题(20161105) 方程式
- POJ2706 Connect(并查集+模拟)
- POJ 1944 并查集(模拟)
- JZOJ4708. 【NOIP2016提高A组模拟8.20】奇洛金卡达 倒着做的思想+并查集维护
- JZOJ5373. 【NOIP2017提高A组模拟9.17】信仰是为了虚无之人 并查集+启发式合并
- 并查集和(小米面试题)
- NOIP2010提高组 关押罪犯 (并查集入门)
- 【noip2010提高组】 关押罪犯 并查集+贪心
- SSL2562 2016年提高组模拟试题 禅与园林艺术
- luogu1525【2010提高】关押罪犯(贪心+并查集)
- 【NOIP 2010 提高组 T3】关押罪犯(并查集)
- SSL2687 2017年8月14日提高组T1 跳跃(kruskal,并查集)
- Ubuntu16.04使用FLANN出现的错误记录
- 欢迎使用CSDN-markdown编辑器
- Python学习2
- SpringBoot30-springboot企业级开发-异步消息
- mysql 性能优化方案
- SSL2542 2016提高组模拟试题 皮皮(并查集)
- Leetcode算法学习日志-86 Partition List
- swift print Double
- 线程同步工具包总结
- 25_多线程
- nuxt 的异步请求方式 await axios和 axios区别
- Qt中文乱码解决思路
- [NOIP模拟] Game
- BZOJ 5071 [Lydsy 十月月赛] 排序 解题报告