题意

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君的第三题的更多相关文章

  1. test20181016 B君的第三题

    题意 B 君的第三题(haskell) 题目描述 大学四年,我为什么,为什么不好好读书,没找到和你一样的工作. B 君某天看到了这样一个题,勾起了无穷的回忆. 输入\(n, k\) 和一棵\(n\) ...

  2. test20181015 B 君的第三题

    题意 B 君的第三题(zhengzhou) 题目描述 让你在战争和耻辱中做一块选择,你选择耻辱,可你将来还得进行战争. 在平面上有n 个整点(横纵坐标都是整数) B 君想找到一个整点,使得这个点,到所 ...

  3. test20181018 B君的第三题

    题意 B 君的第三题(shenyang) 题目描述 客似云来,万里无云 B 君得到了一个数组\(\{a_1,a_2,\dots,a_n\}\). B 君想通过修改让数组中个每对数都互质. 每次使一个数 ...

  4. noiac132 B君的第三题 (树形dp)

    传送门 本来想用点分治做,结果root又求不对 算的时候还算错了 我好菜啊 结果szr大佬告诉我是树形dp 我好菜啊!! 我们有$\lceil \frac{x}{k} \rceil = \frac{x ...

  5. shanquan2的两年三题系列

    好像只有2个月就退役啦 不管了,先说一下哪三题:多点求值.lcm.替罪羊树(bzoj3065) [upd0]2016.3.29 多点求值A掉啦,myy卡常数sxbk(不是说好的是shanquan2出的 ...

  6. 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; ...

  7. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  8. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...

  9. 《学习OpenCV》练习题第四章第三题b

    #include <highgui.h> #include <cv.h> #include "opencv_libs.h" /* *<学习OpenCV ...

随机推荐

  1. bzoj1601 / P1550 [USACO08OCT]打井Watering Hole(堆优化prim)

    P1550 [USACO08OCT]打井Watering Hole   对于自己建水库的情况,新建一个虚拟结点,和其他点的边权即为自建水库的费用 这样问题就转化为一个裸最小生成树问题了. 这里用堆优化 ...

  2. Coursera SDN M1.2.1 SDN History: Programmable Networks 1

    接上第二点 NOTE (2)active networks => Programmability in networks(1990s) Sturcture: What are active ne ...

  3. Java FastJson 介绍

    1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...

  4. Codeforces Round #408 (Div. 2) C. Bank Hacking

    http://codeforces.com/contest/796/problem/C Although Inzane successfully found his beloved bone, Zan ...

  5. Maximum Depth of Binary Tree,求树的最大深度

    算法分析:求树的最小最大深度时候,都有两种方法,第一种是递归思想.树最大最小深度,即为它的子树的最大最小深度+1,是动态规划的思想.还有一种方法是层序遍历树,只不过求最小深度时,找到第一个叶子节点就可 ...

  6. codeforces 11 B.Jumping Jack 想法题

    B. Jumping Jack Jack is working on his jumping skills recently. Currently he's located at point zero ...

  7. Windows 搭建 Linux kernal0.11 环境

    下载:http://www.oldlinux.org/Linux.old/bochs/ 安装bochs 运行 界面:

  8. [转]如何使用VS 2013發布一個可以在Windows XP中獨立運行的可執行文件

    https://read01.com/Mg337.html (台/湾的论坛,需要f/q) 1. 閱讀此文章的同學先看看我的另外一篇文章: 現在,我們深入探討一下: <如何使用VS 2013發布一 ...

  9. CPU上下文切换详解

    CPU上下文切换详解 原文地址,译文地址,译者: 董明鑫,校对:郑旭东 上下文切换(有时也称做进程切换或任务切换)是指CPU 从一个进程或线程切换到另一个进程或线程.进程(有时候也称做任务)是指一个程 ...

  10. git入门篇

    git是一个分布式版本管理软件,总之是一个软件. github是一个代码托管平台,总之是一个网站. github这个网站使用git这个版本管理软件来托管代码. 相当于本地.公司服务器.Github网站 ...