【3.16高一(第二学期)模拟测试】 T3,T4题解
看到这个标题我想你一定会想为什么小编只发T3,T4的题解,原因有很多:1)小编也不怎么会讲;2)小编搜遍各大OJ,都没有找到可以提交的地方;3)虽然给了测试数据,小编懒得一个一个试。如果你找到了测评网址,欢迎留言。
先说T3,题目如下:
C、团伙
【问题描述】
TEIAI 集团共有 n 名员工,编号为 1~n。由于长期的权力斗争,他们形成了
复杂的势力网络。对于任意两名员工,他们可能是朋友,可能是敌人,也可能没
什么关系。并且这种关系满足:(1)朋友的朋友是我的朋友;(2)敌人的敌
人也是我的朋友。为了抱团取暖,党同伐异,员工们形成了若干团伙,每个团伙
均满足:团伙内的所有人互为朋友,团伙外的每个人都不是朋友。
集团的高层认为,这种斗争关系可以加速优胜劣汰的过程,从而促进集团的
盈利。他们通过暗访得到了这样的 m 条信息:每条信息包含 3 个值 p,x,y,
p=F 表示员工 x 与 y 是朋友,p=E 表示员工 x 与 y 是敌人。请你根据这 m 条信
息,判断这些员工最多可能形成多少个团伙?
【输入格式】
第 1 行为 n 和 m,1<n<1000,1<=m<=5000;
以下 m 行,每行为 pxy。
【输出格式】
一个整数,表示这 n 个人最多可能有几个团伙。
【输入样例】
64
E14
F35
F46
E12
【输出样例】
3
【样例说明】{1},{2,4,6},{3,5}
看起来这道题需要好好思索一番,此题一看就知道必须要用并查集(不会点这里)。首先,题目中出现了两种关系,分别是朋友关系和敌人关系,那么就要分类讨论了,先看朋友关系,这个好说,直接合并就可以了;那么敌人关系呢?根据敌人的敌人是朋友这个条件,只需要分别把敌人和另一个敌人的敌人合并即可。
代码如下:
#include<iostream>
using namespace std;
int n,m,p,q,a[],ans=,num[];char c,ch;
int find(int x)//并查集
{
if(x==a[x]) return x;
else return a[x]=find(a[x]);
}
int main()
{
//freopen("group.in","r",stdin);
//freopen("group.out","w",stdout);
cin>>n>>m;
for(int i=;i<=n*;i++) a[i]=i;//为了后续操作更方便,将1~n存为每一个人的祖先,n+1~n+n为1~n每个人的敌人,例如1和1+n是敌人关系
for(int i=;i<=m;i++)
{
cin>>c;
cin>>p>>q;
if(c=='F') a[find(p)]=find(q);//朋友关系直接合并
else
{
a[find(p+n)]=find(q);//将敌人与敌人的敌人合并
a[find(q+n)]=find(p);//同上
}
}
for(int i=;i<=n;i++)
if(a[i]==i) ans++;//判断有多少个祖先即可知道有多少个团伙
cout<<ans;
return ;
}
T4,题目如下:
D、家谱
【问题描述】
给定一系列父子关系,求某些人的祖先。“祖先”指的是从该人开始,沿父
子关系向上追溯可以达到的辈分最大的人。
【输入格式】
每行包含一个人名和一个标识符。标识符紧贴在名字的前面,不同标识符的
含义如下:(人名用 Name 指代)
#Name:从下一行开始,每一个以标识符+开头的人名都是 Name 的儿子,
直至遇到第一个不以+开头的人名;
+Name:上一个用#标识的人的儿子;
?Name:要求输出 Name 的祖先。
最后一行用一个字符$表示输入结束。
【输出格式】
按照输入文件的要求顺序,求出每一个用?标识的人的祖先,格式:本人的
名字+一个空格+祖先的名字+回车。
【输入样例】
#George
+Rodney
#Arthur
+Gareth
+Walter
#Gareth
+Edward
?Edward
?Walter
?Rodney
?Arthur
$
【输出样例】
EdwardArthur
WalterArthur
RodneyGeorge
ArthurArthur
【数据规模】
输入文件的总行数≤200,000。
这道题与之前T3一样,需要用到并查集,但是合并是一件很麻烦的事情,如果装换成序号来做就太麻烦了,还会出现各种不必要的麻烦。那么就要请出传奇的map了。
map是什么呢?用东西总得加头文件吧,要加上#include<map>才能用,map主要用来使两个元素发生联系,并且这两个元素可以是任意类型,这样数组下标就可以用string了。
代码如下:
#include<iostream>
#include<cstring>
#include<map>
using namespace std;
map<string,string>a;//尖括号内的两种类型可以分别当成数组下标与数组值的类型
string c,s;char ch;
string find(string x)//字符串+并查集
{
if(a[x]==x) return x;
else return a[x]=find(a[x]);
}
int main()
{
for(;;)
{
cin>>ch;
cin>>c;
if(ch=='$') break;
else if(ch=='#')
{
s=c;
if(a[s]=="") a[s]=s;//如果s没有爹,那么就只能让s叫自己爹了
}
else if(ch=='+') a[c]=s;
else cout<<c<<" "<<find(c)<<endl;
}
return ;
}
【3.16高一(第二学期)模拟测试】 T3,T4题解的更多相关文章
- [CSP-S模拟测试50]反思+题解
??大部分人都觉得T3是道不可做题去刚T1T2了,于是我就侥幸苟到了前面? 这场考试比较成功的就是快速水掉了T1T2的部分分,1h拿到88分起码为之后硬肝T3上了保险(赛后发现就算T3爆零也能rank ...
- [NOIP模拟测试34]反思+题解
不要陷入思维定势,如果长时间没有突破就要考虑更改大方向. 不要把简单问题复杂化. 做完的题就先放下,不管能拿多少分.不能过一段时间就回来调一下. $Solutions:$ A.次芝麻 因为$n+m$始 ...
- [CSP-S模拟测试48]反思+题解
状态很垃圾的一场考试.感觉“这么多分就够了”的心态很是在给自己拖后腿. 打开题面,第一页赫然写着:$Claris' Contest$. 吓得我差点手一抖关掉.不过后来想想似乎强到变态的人出的题都不是很 ...
- [CSP-S模拟测试47]反思+题解
打开题面,T3似乎被换过了.(那我就更有理由直接弃掉了) T1是我最害怕的乱搞题,赶紧扔了看T2.发现是个sb板子?雨天的尾巴弱化版? 然而线段树合并早忘干净了(最近几道可以线段树合并的题都是用别的方 ...
- [NOIP模拟测试32]反思+题解
又考挂了QAQ 总rank直接滑出前20 晚上考试脑子还算比较清醒,可惜都用来xjb乱想错误思路了. T1一眼推柿子,然而并没有头绪所以先码了个暴力.然后…… 一个垃圾暴力我调了1h,大概解决了两位数 ...
- csps模拟测试7576一句话题解
题面:https://www.cnblogs.com/Juve/articles/11694454.html 75考了数学,化学和物理... T1: 假设有一个A和B,那么对于每一个j!=i,都有$\ ...
- [NOIP模拟测试37]反思+题解
一定要分析清楚复杂度再打!!!窝再也不要花2h20min用暴力对拍暴力啦!!! 雨露均沾(滑稽),尽量避免孤注一掷.先把暴力分拿全再回来刚正解. 即使剩下的时间不多了也优先考虑认真读题+打暴力而非乱搞 ...
- [NOIP模拟测试7]visit 题解(组合数学+CRT+Lucas定理)
Orz 因为有T的限制,所以不难搞出来一个$O(T^3)$的暴力dp 但我没试 据说有30分? 正解的话显然是组合数学啦 首先$n,m$可能为负,但这并没有影响, 我们可以都把它搞成正的 即都看作向右 ...
- [7.18NOIP模拟测试5]星际旅行 题解
题面(加密) 考场上靠打表yy出的规律进而想到的正解233333 可以把一条双向边拆成两条单向边,这样的话每个点度数都为偶数,符合欧拉图的定义. 那么题目可以转化为:去掉两条边,使图中存在一条欧拉路. ...
- csps模拟测试707172部分题解myc
题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...
随机推荐
- 2017北京国庆刷题Day6 afternoon
期望得分:100+100+40=240 实际得分:100+0+40=140 二进制拆分.二进制前缀和 #include<cstdio> #include<iostream> u ...
- Linux rpm yum 等安装软件
任何程序都是先写代码,拿到源码去编译得到一个目标程序. 1 编译的过程复杂有需要准备编译的环境,和硬件有关,32位64位,内核的不同等等所以需要编译多次 Java特殊但是他需要安装jvm, ...
- MDI窗体简单方法(调用,闪屏)
调用方式: RibbonForm mdishow = new RibbonForm(); //实例化 midshow.MdiParent = this; //设置在主窗体,以MDI的方式显示,关键属性 ...
- 20155117王震宇 2016-2017-2 《Java程序设计》第十周学习总结
教材学习内容总结 Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd) 第22章 网络 {{屏幕快照 2017-04-30 下午8.38.06.pn ...
- spring-boot支持websocket
spring-boot本身对websocket提供了很好的支持,可以直接原生支持sockjs和stomp协议.百度搜了一些中文文档,虽然也能实现websocket,但是并没有直接使用spring-bo ...
- AJAX的前世今生与未来
一.通过三个问答来认识一下Ajax 什么是Ajax? Ajax是Asynchronous Javascript And XML的缩写,它是一种技术. Ajax有什么用? 这一技术能够向服务器请求额外的 ...
- LCD常用接口原理【转】
转自:http://blog.csdn.net/wocao1226/article/details/23870149 LCD常用接口原理 点击打开链接 点击打开链接 点击打开链接 点击打开链接 点击打 ...
- linux下route命令--说的比较清楚!
linux下route命令 route命令感觉很不容易.一般开机后在命令行中使用route命令,会得到下面的信息 Kernel IP routing table Destination ...
- python 并发爬虫的快感
import time from tomorrow import threads from requests_html import HTMLSession session=HTMLSession() ...
- Windows上安装Jekyll
Jekyll是什么 jekyll是一个简单的免费的Blog生成工具,是一个静态站点生成器, 它会根据网页源码生成静态文件.它提供了模板.变量.插件等功能,所以实际上可以用来编写整个网站.也可使用基于j ...