test20181019 B君的第三题
题意
B 君的第三题(urumqi)
题目描述
风雨如晦,鸡鸣不已。
B 君最近在研究自己的学长都在做什么工作,每个学长属于一个公司。
B 君会获得一些信息,比如x 和y 在相同公司,x 和y 在不同公司。
如果当前信息和之前记住的所有信息都不矛盾,B 君会记住这条信息,否则B 君会指出矛盾。
你需要输出B 君是记住了信息,还是指出了矛盾。
输入格式
第一行一个整数n。
接下来n 行,每行三个整数x; y; p。
如果p = 1,这条信息表示x 和y 在相同公司。
如果p = 0,这条信息表示x 和y 在不同公司。
输出格式
对于每条信息,输出一个字符串Yes 或No。
如果这条信息和之前记住的所有信息不矛盾,输出Yes,并且记住这条信息。
如果这条信息和之前记住的所有信息矛盾,输出No,并且不记住这条信息。
样例输入
3
1 2 1
1 3 1
2 3 0
样例输出
Yes
Yes
No
数据规模与约定
对于100% 的数据,满足\(1 \leq n \leq 100000, 1 \leq x, y \leq 10^8, 0 \leq p \leq 1\)。
对于50% 的数据,满足\(n \leq 1000\)。
对于50% 的数据,满足\(x, y \leq 100\)。
以上两部分数据有25% 的交集。
分析
维护在同一个公司可以用并查集,关键在于如何维护不在同一公司中。
维护不在同一公司中可以用set,合并的时候更新就行了。
set可以启发式合并,但是不启发式也行。
B君:这题不好出数据卡不启发式合并,所以std也就没写启发式合并
代码
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#define rg register
#define il inline
#define co const
#pragma GCC optimize ("O0")
using namespace std;
template<class T> il T read()
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return data*w;
}
template<class T> il T read(T&x)
{
return x=read<T>();
}
typedef long long ll;
const int INF=0x7fffffff;
const int MAXN=2e5+7;
int v[MAXN],len;
int x[MAXN],y[MAXN],p[MAXN];
int fa[MAXN];
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
set<int>S[MAXN];
int main()
{
freopen("urumqi.in","r",stdin);
freopen("urumqi.out","w",stdout);
int n=read<int>();
for(int i=1;i<=n;++i)
{
read(x[i]);read(y[i]);read(p[i]);
v[++len]=x[i],v[++len]=y[i];
}
sort(v+1,v+len+1);
len=unique(v+1,v+len+1)-v-1;
for(int i=1;i<=n;++i)
{
x[i]=lower_bound(v+1,v+len+1,x[i])-v;
y[i]=lower_bound(v+1,v+len+1,y[i])-v;
}
for(int i=1;i<=len;++i)
{
fa[i]=i;
}
for(int i=1;i<=n;++i)
{
int x=::x[i],y=::y[i];
x=find(x),y=find(y);
if(p[i]==1)
{
if(S[x].find(y)!=S[x].end())
{
puts("No");
}
else
{
puts("Yes");
if(x==y)
continue;
fa[x]=y;
for(auto i:S[x])
{
int z=i;
S[z].erase(x);
S[z].insert(y);
}
S[y].insert(S[x].begin(),S[x].end());
S[x].clear();
}
}
else
{
if(x==y)
{
puts("No");
}
else
{
puts("Yes");
S[x].insert(y);
S[y].insert(x);
}
}
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
test20181019 B君的第三题的更多相关文章
- test20181016 B君的第三题
题意 B 君的第三题(haskell) 题目描述 大学四年,我为什么,为什么不好好读书,没找到和你一样的工作. B 君某天看到了这样一个题,勾起了无穷的回忆. 输入\(n, k\) 和一棵\(n\) ...
- test20181015 B 君的第三题
题意 B 君的第三题(zhengzhou) 题目描述 让你在战争和耻辱中做一块选择,你选择耻辱,可你将来还得进行战争. 在平面上有n 个整点(横纵坐标都是整数) B 君想找到一个整点,使得这个点,到所 ...
- test20181018 B君的第三题
题意 B 君的第三题(shenyang) 题目描述 客似云来,万里无云 B 君得到了一个数组\(\{a_1,a_2,\dots,a_n\}\). B 君想通过修改让数组中个每对数都互质. 每次使一个数 ...
- noiac132 B君的第三题 (树形dp)
传送门 本来想用点分治做,结果root又求不对 算的时候还算错了 我好菜啊 结果szr大佬告诉我是树形dp 我好菜啊!! 我们有$\lceil \frac{x}{k} \rceil = \frac{x ...
- shanquan2的两年三题系列
好像只有2个月就退役啦 不管了,先说一下哪三题:多点求值.lcm.替罪羊树(bzoj3065) [upd0]2016.3.29 多点求值A掉啦,myy卡常数sxbk(不是说好的是shanquan2出的 ...
- Java-集合-第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum 表示学生的班号,例如“class05”。 有如下List List list = new ArrayList(); l
第三题 有如下Student 对象, private String name; private int age; private int score; private String classNum; ...
- NOIP 2008提高组第三题题解by rLq
啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...
- NOIP2008提高组(前三题) -SilverN
此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...
- 《学习OpenCV》练习题第四章第三题b
#include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...
随机推荐
- 服务器环境配置nginx / php / php-fpm(一)
登陆,升级应用,查询和关闭selinux yum update getenforce setenforce 0 vi /etc/selinux 添加非root用户 adduser deploy pas ...
- 浅谈history对象以及路由插件原理
简介 History对象最初设计用来表示窗口的浏览历史,但是,出于隐私方面的原因,History对象不再允许脚本访问已经访问过的实际URL.虽然,我们不清楚历史URL,但是,我们可以通过History ...
- ansible之template模块
趁着最近在搞ansible,现在学习了一波template模块的用法: 1.使用template模块在jinja2中引用变量,先来目录结构树 [root@master ansible]# tree . ...
- 20145333 《网络对抗技术》 PC平台逆向破解
20145333 <网络对抗技术> PC平台逆向破解 20145333 <网络对抗技术> PC平台逆向破解 Shellcode注入 基础知识 Shellcode实际是一段代码, ...
- BurpSuite工具应用
BurpSuite工具应用 BurpSuite是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP ...
- kafka生产者和消费者流程
前言 根据源码分析kafka java客户端的生产者和消费者的流程. 基于zookeeper的旧消费者 kafka消费者从消费数据到关闭经历的流程. 由于3个核心线程 基于zookeeper的连接器监 ...
- 转:常用svn命令
在公司需要提交代码,常用的就是co.ci.add.up.和log 首先 svn help 可以看到 svn 所支持的全部命令: 命令不多,如果用过Tortoise SVN的客户端,从字面上也不难理解这 ...
- BZOJ 3572 【HNOI2014】 世界树
题目链接:世界树 首先看到\(\sum m_i\le 3\times 10^5\)这个条件,显然这道题就需要用虚树了. 在我们构建出虚树之后,就可以用两遍\(dfs\)来求出离每个点最近的议事处了.然 ...
- 部分函数依赖 && 完全函数依赖
部分函数依赖:若x->y 并且,存在X的真子集x1,使得x1->y,则 y部分依赖于x. 完全函数依赖:若x->y并且,对于x的任何一个真子集x1,都不存在x1->y,则称y完 ...
- orm框架的使用
Install npm install orm Node.js Version Support Supported: 0.12 - 6.0 + Tests are run on Travis CI I ...