时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
幼儿园的孩子们正在做游戏,每个人都有自己的帮派,帮派之间打架,然后赢者吞并弱者扩大自己的势力。最开始每个孩子的帮派中只有自己,然后接下来有会有两个人打架,这两个人会集结自己所属的势力开始打架,打赢的一方就会吞并输的一方,当然如果x,y是一个势力就不会打起来。有些聪明的小朋友会将自己的糖分给其他小朋友引诱他离开所属势力加入到自己势力。又有一些小朋友会对现在的势力不满,然后反叛出去自立门户。

作为打架的双方,只有人数大于另一方才能打赢。即:人数相等则没有输赢,两个帮派没有变化。

幼儿园里面共有N个孩子,接下来有M次操作,操作有如下4种
1) query 查询现在有多少个势力。
2) fight x y 表示x,y打架.并输出”z is winner!”胜利的一方(z是x或y),如果没有打平则输出”Either is winner!”.如果x,y属于同一个势力不会打架,当然也不用输出.
3) tempt x y 表示x诱惑y、将y拉入x的势力。
4) revolt x 表示x反叛,(自立门户)

输入描述:
第一行输入一个T代表有T组数据
接下来第一行有两个整数N,M,代表N个孩子,M次操作。
接下来有M行。每行输入有如下三种。
1) query
2) fight x y
3) tempt x y
4) revolt x
1<=T<=10;
1<=N,M<=100000;
1<=x,y<=N;
输出描述:
第一行输出”Case #x:”,表示第x组测试数据。
接下来输出查询结果,每个结果占一行。
示例1
输入

1
5 9
query
tempt 1 2
query
fight 4 5
query
fight 2 3
query
revolt 2
query
输出

Case #1:
5
4
Either is winner!
4
2 is winner!
3
4
分析:就是并查集的 并查删操作。可以先参考我上一篇博文,有个更裸的并查集操作问题。
代码

#include<bits/stdc++.h>
using namespace std;const int MAXN = 100000*3;
const int MAXM = 1e6 ;int pre[MAXN],pos[MAXN],num[MAXN],tot,sz;
void Init(int n){  // 初始化for(int i=0;i<=n;i++){pos[i]=pre[i]=i;num[i]=1;}tot=n; sz=n;
}
int Find(int x){  // 查return x==pre[x]?x:(pre[x]=Find(pre[x]));
}
bool Join(int x,int y){ // x合并到y上,注意传参顺序x=pos[x]; y=pos[y];int fx=Find(x); int fy=Find(y);if(fx==fy) return false;pre[fx]=fy; num[fy]+=num[fx];sz--;return true;
}
bool Del(int x){  //删int fx=Find(pos[x]);if(num[fx]==1) return false;num[fx]--;pos[x]=++tot; pre[tot]=tot; num[tot]=1;sz++;return true;
}
int main(){int n,m; int ncase=1;int T;scanf("%d",&T);while(T--){printf("Case #%d:\n",ncase++);int n,m; scanf("%d%d",&n,&m);Init(n); char op[10];while(m--){scanf("%s",op);if(op[0]=='q') printf("%d\n",sz);else if(op[0]=='f'){int x,y;scanf("%d%d",&x,&y);int fx=Find(pos[x]); int fy=Find(pos[y]);if(fx==fy) continue;if(num[fx]==num[fy]) puts("Either is winner!");else if(num[fx]<num[fy]) {Join(x,y);printf("%d is winner!\n",y);}else {Join(y,x);printf("%d is winner!\n",x);}}else if(op[0]=='r') {int x;scanf("%d",&x);Del(x);}else if(op[0]=='t') {int x,y;scanf("%d%d",&x,&y);Del(y); Join(y,x);}}}
return 0;
}

【 newcoder 】幼儿园战争 【并查集+删并查】相关推荐

  1. *【HDU - 2473】Junk-Mail Filter (并查集--删点操作)

    题干: Recognizing junk mails is a tough task. The method used here consists of two steps:  1) Extract ...

  2. 数据结构之并查集:并查集的介绍与Python代码实现——18

    并查集的介绍 并查集(Union-find)数据结构也称作合并查找集(Merge-find set)或者不相交集数据结构(disjoint-set data structure),它是一种记录了由一个 ...

  3. 并查集 ---- 扩展域并查集判二分图 + 循环模拟字典树 The 2020 ICPC Asia Macau Regional Contest C. Club Assignment (详解)

    题目链接 题目大意: 有n个数,现在要把他们拆分成两个集合,假设S为集合,有如下定义: f(S)={min(x⊕y)∣x,y∈S,andx!=y}f(S)=\{min(x\oplus y)|x,y\i ...

  4. 【数据结构之并查集】并查集详解(零基础入门,超级有趣的!!!)

    转的一个超级有意思,好懂的并查集解释, 膜拜大神~~ 故事读完,并查集就会了~~~~~ 江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的 ...

  5. 【并查集】并查集的基本操作总结

    并查集的定义:"并",Union(合并):"查",Find(查找):"集",Set(查找): 并查集的实现: int father[N]; ...

  6. 【POJ - 1182】 食物链(附超详细讲解)(并查集--种类并查集经典题)

    题干: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.  现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.  ...

  7. 数据结构之并查集:并查集解决案例, Python——21

    并查集解决案例畅通工程 案例问题介绍: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  8. 并查集模板——并查集(洛谷 P3367)

    题目选自洛谷P3367 是并查集的最入门的题目,也是并查集的模板题~~ 如果你还不知道并查集是什么? 请看我的这篇文章 点击链接 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入格式 ...

  9. #1066 : 无间道之并查集(map+并查集)

    #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之,小Hi和小H ...

最新文章

  1. LOJ 3094 「BJOI2019」删数——角标偏移的线段树
  2. 强化学习(一)——专业术语及OpenAI Gym介绍
  3. IOS对plist配置文件的读写操作
  4. Tomcat的详解和优化
  5. 2017-08-14 前端日报
  6. C#开发笔记之04-如何用C#优雅的计算个人所得税?
  7. html5 push api,HTML5+ API Reference
  8. 鲍岳桥:52 岁还在熬夜写代码! | 人物志
  9. 【行为识别】基于matlab轨迹法行为识别【含Matlab源码 375期】
  10. easy-scratch3源码分析
  11. mysql数据库总结_MySQL数据库优化-总结
  12. php里用钢笔画曲线,ps钢笔工具怎么画图
  13. 异常(Exception)
  14. Unity中的矩阵Matrix
  15. 为什么现在台式计算机无光驱,为何现在大部分电脑(笔记本和台式机)都取消了光驱?...
  16. 计算机能手数据的计算教学设计,《数据计算》优秀教案.docx
  17. caffe小问题汇总(持续更新)
  18. 自媒体人值得拥有的20个免费精美图片网站
  19. 抑郁症的复发风险到底有多高?如何预防抑郁症复发?
  20. 基于java离散制造业产品销售管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. C# 中的委托和事件[转自张子扬]
  2. TI-Davinci开发系列之七DVSDK-4.03目录介绍
  3. 致这一段无悔的大学青春
  4. Heart Rate Variability Analysis with the HRV Toolkit: Basic Time and Frequency Domain Measures
  5. 浅谈深度学习:了解RNN和构建并预测
  6. 想考阿里云ACE需要做什么准备?考下来难不难?
  7. amd为什么还用针脚_闲聊CPU针脚 一年一换都怪AMD不给力?
  8. 软件产品的增值税税率该如何选择?
  9. 让照片开口讲话,让视频人物对口型
  10. STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读