师大校赛D coloring Game 并查集
这题说的是 在一个 森林中 两个人在这棵树上涂颜色,黑色或者白色,第一次只能在1 号节点上涂色 第二次 只能在2上涂,以此类推, 在每个节点上只能涂黑色或者白色,并且相邻的点不能有相同的颜色,最后求不能填的人就输了。
每个点周围的比他小的点 都会有一个祖先(或者是他们自己),我们知道他周围的点的祖先中最小的那个点 一定是影响他的最小的点 那么他取什么值这就不那么重要了。无论他取黑还是白,后面的就只是相对而言,那么如果他受到第二小或者以上的点的影响,那么他就一定不能了, 还有就是当他和他周围点离他们共同祖先的距离一样的时候也是不行的。
哪个先出现错误哪个就失败了。
#include <iostream>
#include <algorithm>
#include<string.h>
#include<vector>
#include <cstdio>
using namespace std;
const int maxn=;
struct Edg{
int to,nxt;
Edg(int a=,int b=){
to=a; nxt=b;
}
}P[maxn*];
int len[maxn],fa[maxn],first[maxn],pos;
void add(int a, int b){
P[pos].to=b; P[pos].nxt=first[a];
first[a]=pos++;
}
int find(int x){
if(x!=fa[x]){
int f=find(fa[x]);
len[ x ] = len[ fa[x] ]^len[x];
fa[ x ] = f;
}
return fa[x];
}
bool uunion(int x, int y){
int fx=find(x);
int fy=find(y);
if(fx==fy){
return len[x]!=len[y];
}
if(fx<fy){
fa[fy]=fx;
len[fy ] = len[x]^len[y]^;
}else{
fa[fx]=fy;
len[fx] = len[x]^len[y]^;
}
return true;
}
int qq[maxn*];
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int N,M,cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; cc++){
pos=;
scanf("%d%d",&N,&M);
for(int i=; i<=N; i++){
first[i]=; fa[i]=i; len[i]=;
}
for(int i=; i<M; i++){
int a,b;
scanf("%d%d",&a,&b);
add(a,b); add(b,a);
}
int ans=-;
for(int i=; i<=N&&ans==-; i++){
int pp=;
for(int j=first[i]; j ; j=P[j].nxt){
int to=P[j].to;
if(to>i)continue;
qq[pp++]=find(to);
}
sort(qq,qq+pp);
pp = unique(qq,qq+pp)-qq;
for(int j=; j<pp; j++)
if( qq[j]% != i% )ans=i;
for(int j=first[i]; j; j=P[j].nxt){
int to=P[j].to;
if(to>i) continue;
if(!uunion(i,to))ans=i;
}
}
printf("Case %d: ",cc);
if(ans==-)printf("Draw\n");
else{
if( (ans&) ==)printf("Maze\n");
else printf("Fat Brother\n");
}
} return ;
}
师大校赛D coloring Game 并查集的更多相关文章
- 2019浙师大校赛(浙大命题)(upc复现赛)总结
2019浙师大校赛(浙大命题)(upc复现赛)总结 早上九点开始.起得迟了,吃了早饭慌慌张张跑过去,刚到比赛就开始了. 开始分别从前往后和从后往前看题,一开始A题,第一发WA,第二次读题发现漏看了还有 ...
- HDU 4750 Count The Pairs (2013南京网络赛1003题,并查集)
Count The Pairs Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- zoj 3659 第37届ACM/ICPC 长春赛区现场赛E题 (并查集)
题意:给出一棵树,找出一个点,求出所有点到这个点的权值和最大,权值为路径上所有边权的最小值. 用神奇的并查集,把路按照权值从大到小排序,然后用类似Kruskal的方法不断的加入边. 对于要加入的一条路 ...
- noip模拟赛 动态仙人掌(并查集,贪心)
思路: 贪心+并查集 因为45‘,所以可以很方便的算出每个仙人掌的最晚起跳(左端点) 右端点自然也能出来 先按左端点排序 如果他右面的和他相交,就更新 用并查集维护这个更新的关系 更新的同时维护高就好 ...
- PAT 天梯赛 L2-024. 部落 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-024 题意 给出 几个不同的圈子,然后 判断 有哪些人 是属于同一个部落的,或者理解为 ,有哪些人 是有关系的 ...
- 2019 ICPC 徐州网络赛 B.so easy (并查集)
计蒜客链接:https://nanti.jisuanke.com/t/41384 题目大意:给定n个数,从1到n排列,其中有q次操作,操作(1) 删除一个数字 // 操作(2)求这个数字之后第一个没有 ...
- 蓝桥杯模拟赛-引爆炸弹-DFS+并查集
今天整理电脑,翻出来了很久以前大佬给的题,贴一下. 引爆炸弹 1000ms 在一个 n×m的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上的所有炸弹引爆,被引爆的炸 ...
- 并查集+拓扑排序 赛码 1009 Exploration
题目传送门 /* 题意:无向图和有向图的混合图判环: 官方题解:首先对于所有的无向边,我们使用并查集将两边的点并起来,若一条边未合并之前, 两端的点已经处于同一个集合了,那么说明必定存在可行的环(因为 ...
- POJ-2421Constructing Roads,又是最小生成树,和第八届河南省赛的引水工程惊人的相似,并查集与最小生成树的灵活与能用,水过~~~
Constructing Roads Time Limit: 2000MS Memory Limit: 65536K Description There are N v ...
随机推荐
- 为QtCreator项目模板添加自动中文支持
每用QtCreator创建一个Qt项目时都要为它添加中文支持,比如qt4: 就要在main.cpp里添加 QTextCodec* codec = QTextCodec::codecForName(&q ...
- 【PyQt5-Qt Designer】鼠标+键盘事件
重定义鼠标响应+键盘响应事件 一,每个事件都被封装成相应的类: pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等.而它们的基类是QEv ...
- 学习UDP
参考博客:https://www.cnblogs.com/skyfsm/p/6287787.html 简单编写了 udp的小程序,udp_client 端通过终端输入字符,然后发送给udp_serve ...
- vs 2017 集成python
官网:https://docs.microsoft.com/en-us/visualstudio/python/installation
- 封装||property
封装 封装:主要是指在类的定义阶段将,以__开头的属性名进行变形..例如:__name ==> _People__name 封装的主要特点: 1.在类外部无法直接__name,想要在外部调用可以 ...
- 基于nodejs的 本地文件夹http服务器:http-server
请记住,是文件夹服务器 $ npm install http-server -g $ cd /tmp && http-server 或: $ http-server /tmp
- Python开发【项目】:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- [sh]md5sum接变量,find排除,sh判断文件存在
1.md5sum md5sum `cat path_to_file|dos2unix` 注: 发现有些linux是gbk编码, 导致md5或ls 接变量后报错.需要dos2unix处理 2.find排 ...
- 通过socket实现http通讯代码理解
1.首先构造http协议报头: String dd = "GET http://www.baidu.com HTTP/1.1" + "\r\n" + " ...
- Centos的升级与更新
系统升级(6.5->7.2): 这里拿Centos6升级到Centos7为例: 1.查看当前CentOS版本cat /etc/redhat-release 2.更新源vim /etc/yum.r ...