Description

给$n$组操作,每组操作形式为$x\;y\;p$.

当$p=1$时,如果第$x$变量和第$y$个变量可以相等,则输出$YES$,并限制他们相等;否则输出$NO$,并忽略此次操作.

当$p=0$时,如果第$x$变量和第$y$个变量可以不相等,则输出$YES$,并限制他们不相等;否则输出$NO$,并忽略此次操作.

Input

输入一个数$n$表示操作的次数.接下来$n$行每行三个数$x,y,p$.

Output

对于$n$行操作,分别输出$n$行$YES$或者$NO$.

Sample Input

1 2 1

1 3 1

2 3 0

Sample Output

YES

YES

NO

HINT

$n\;\leq\;10^5,x,y\;\leq\;10^8,p=0\;or\;1$.

Solution

离散化所有的变量.

可以用并查集维护相等的关系,$set$维护不等的关系.

当$p=1$时,如果$x,y$都不在对方的$set$中,则可行,按$set$大小合并它们的父亲和$set$;

当$p=0$时,如果$f[x]\not=f[y]$,把$f[x],f[y]$分别插入对方的$set$中.

#include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 200005
using namespace std;
int a[N],f[N],x[N],y[N],p[N],n,m;
set<int> s[N];
set<int>::iterator l;
inline int gf(int k){
if(f[k]==k) return k;
return f[k]=gf(f[k]);
}
inline int search(int k){
int l=,r=m,mid;
while(l<r){
mid=(l+r)>>;
if(a[mid]<k) l=mid+;
else r=mid;
}
return l;
}
inline void init(){
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%d%d%d",&x[i],&y[i],&p[i]);
a[++m]=x[i];a[++m]=y[i];
}
sort(a+,a++m);
for(int i=;i<=n;++i){
x[i]=search(x[i]);
y[i]=search(y[i]);
}
for(int i=;i<=m;++i) f[i]=i;
for(int i=,j,k,q;i<=n;++i){
j=gf(f[x[i]]);k=gf(f[y[i]]);
if(!p[i]){
if(j==k) puts("NO");
else{
puts("YES");
s[j].insert(k);
s[k].insert(j);
}
}
else{
if(j==k) puts("YES");
else if(s[j].count(k)||s[k].count(j)) puts("NO");
else{
puts("YES");
if(s[j].size()>s[k].size()){
q=j;j=k;k=q;
}
f[j]=k;
for(l=s[j].begin();l!=s[j].end();++l){
q=gf(*l);
s[*l].erase(j);
s[q].insert(k);
s[k].insert(q);
}
s[j].clear();
}
}
}
}
int main(){
freopen("judge.in","r",stdin);
freopen("judge.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

[51nod1515]明辨是非的更多相关文章

  1. 题解51nod1515——明辨是非

    前提 在这道题老师讲过之后,再考时,我还是WA了ヽ(*.>Д<)o゜果然,我还是好菜啊~%?…,# *'☆&℃$︿★? 谢谢Jack_Pei dalao的帮忙.~~O(∩_∩)O~ ...

  2. 51nod1515 明辨是非 并查集 + set

    一开始想的时候,好像两个并查集就可以做......然后突然懂了什么.... 相同的并查集没有问题,不同的就不能并查集了,暴力的来个set就行了..... 合并的时候启发式合并即可做到$O(n \log ...

  3. 51nod-1515 明辨是非——并查集

    给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输 ...

  4. 51 nod 1515 明辨是非(并查集合并)

    1515 明辨是非题目来源: 原创基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以 ...

  5. 51nod 1515 明辨是非 启发式合并

    1515 明辨是非 题目连接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1515 Description 给n组操 ...

  6. 51nod 1515 明辨是非 [并查集+set]

    今天cb巨巨突然拿题来问,感觉惊讶又开心,希望他早日康复!!坚持学acm!加油! 题目链接:51nod 1515 明辨是非 [并查集] 1515 明辨是非 题目来源: 原创 基准时间限制:1 秒 空间 ...

  7. 51Nod 1515 明辨是非 —— 并查集 + 启发式合并

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1515 1515 明辨是非  题目来源: 原创 基准时间限制:1 ...

  8. 51nod 1515:明辨是非 并查集合并

    1515 明辨是非 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 给n组操作,每组操作形式为x y p. 当p为1时,如果第x ...

  9. 51nod 1515 明辨是非 并查集 + set + 启发式合并

    给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输 ...

随机推荐

  1. Nginx+keepalived双机热备(主主模式)

    之前已经介绍了Nginx+Keepalived双机热备的主从模式,今天在此基础上说下主主模式的配置. 由之前的配置信息可知:master机器(master-node):103.110.98.14/19 ...

  2. python实现一个图灵机器人

    这标题就是个噱头...其实用的别人的接口,就是这货. 下面是代码: # -*- coding: utf-8 -*- import urllib,urllib2 import sys import js ...

  3. Centos 检查磁盘读写性能

    启动Tomcat发现deploy war的速度明显变慢, 怀疑磁盘出问题 测试写入 [tomcat@localhost ~]$ dd if=/dev/zero of=kwxgd bs=64k coun ...

  4. XAMPP部署

    1,直接从官网上下载,然后安装即可 2,出现的问题: a,启动Apache服务器的时候,出现打开端口失败,原因80号端口已被占用,解决方案,更改config文件,将端口设置为8090 b,给phpmy ...

  5. 设置apache https服务

    配置http.conf,所在位置d:\wamp\bin\apache\apache2.4.9\conf\http.conf   LoadModule socache_shmcb_module modu ...

  6. 工作随笔——Intellij_idea-14官方快捷键中文版

    听说Intellij Idea好几年了.因为快捷键的原因,所以一直没有放弃eclipse.上周末抽了点时间,用google翻译+自己实践翻译了一下官方的快捷键. 基本做完的时候在百度文库上突然搜索到一 ...

  7. [BZOJ1264][AHOI2006]Match(DP+树状数组)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1264 分析: 考虑做一般的LCS的时候,更新结果的条件是a[i]==b[j]时候 于是 ...

  8. BroadcastReceiver之SD的挂载监听

    首先,新建一个类,继承于BroadcastReceiver,然后去配置Manifest.xml这就不用说了, 注意配置Manifest.xml时候的一些细节 必须加上<data android: ...

  9. 为什么要加入<!doctype html>这个文档声明——IE怪异模式

    调试了很久,发现了一个非常细微但又十分重要的问题,又一次我在对于文档声明类型的时候,声明了如下类型 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...

  10. HFS汉化版|简易HTTP服务器

    专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,只要解压缩后执 ...