[51nod1515]明辨是非

Description

组操作,每组操作形式为.

时,如果第变量和第个变量可以相等,则输出,并限制他们相等;否则输出,并忽略此次操作.

时,如果第变量和第个变量可以不相等,则输出,并限制他们不相等;否则输出,并忽略此次操作.

Input

输入一个数表示操作的次数.接下来行每行三个数.

Output

对于行操作,分别输出或者.

Sample Input

3
1 2 1
1 3 1
2 3 0

Sample Output

YES
YES
NO

HINT

.

Solution

离散化所有的变量.

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

时,如果都不在对方的中,则可行,按大小合并它们的父亲和;

时,如果,把分别插入对方的中.

#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=1,r=m,mid;
    while(l<r){
        mid=(l+r)>>1;
        if(a[mid]<k) l=mid+1;
        else r=mid;
    }
    return l;
}
inline void init(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d%d%d",&x[i],&y[i],&p[i]);
        a[++m]=x[i];a[++m]=y[i];
    }
    sort(a+1,a+1+m);
    for(int i=1;i<=n;++i){
        x[i]=search(x[i]);
        y[i]=search(y[i]);
    }
    for(int i=1;i<=m;++i) f[i]=i;
    for(int i=1,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 0;
}
时间: 2024-08-03 17:29:32

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

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

给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输出YES,并限制他们不相等 :否则输出NO,并忽略此次操作. Input 输入一个数n表示操作的次数(n<=1*10^5) 接下来n行每行三个数x,y,p(x,y<=1*10^8,p=0 or 1) Output 对于n行操作,分别输出n行YES或者NO Input示例 3 1 2 1 1 3 1

题解51nod1515——明辨是非

前提 在这道题老师讲过之后,再考时,我还是WA了ヽ(*.>Д<)o゜果然,我还是好菜啊~%?…,# *'☆&℃$︿★? 谢谢Jack_Pei dalao的帮忙.~~O(∩_∩)O~~ 正文 在我这台机子上,直接由网址上到题目会出现 NOFIND404 所以这一次希望看题解的你可以自己动手丰衣足食去找到这道题 首先,这题一看要维护关系,且数据范围不小时,就想到了并查集&&离散化 相等关系具有传递性,即a==b&&b==c等价于a==c.所以当我们在维护相等

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

今天cb巨巨突然拿题来问,感觉惊讶又开心,希望他早日康复!!坚持学acm!加油! 这题一看感觉我写不出来orz, 就晚睡一点也要把WA的代码改AC!! 好困啊,直接贴了睡觉.zZ 题目链接:51nod 1515 明辨是非 [并查集] 1515 明辨是非 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操

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

1515 明辨是非题目来源: 原创基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输出YES,并限制他们不相等 :否则输出NO,并忽略此次操作. Input 输入一个数n表示操作的次数(n<=1*10^5) 接下来n行每行三个数x,y,p(x,y<=1*10^8

电脑监控软件助您明辨是非做一个睿智的管理者

现在的企业员工动不动就是请假,迟到,闹小脾气,一点肯吃苦的念头都没有,企业管理者头痛不已,为了管理好企业的员工,提高工作效率,还 得绞尽脑汁照顾好每个人的感受,说你偏心,搞特殊,区别对待,字字扎心让管理者们生无可恋,每位员工都像金马影帝,上班期间表面功夫做的 十分到位,背地里不务实事,聊天 购物 电影 游戏一个也没落下,没有实锤,和足够的的魄力根本管理不好现在的员工.大多数人都知道,职场如 战场.不论男女,无论老少,职场"绿茶"已经是扎根在各大公司的物种了.这种人有什么特点呢?他们总是

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

给n组操作,每组操作形式为x y p. 当p为1时,如果第x变量和第y个变量可以相等,则输出YES,并限制他们相等:否则输出NO,并忽略此次操作. 当p为0时,如果第x变量和第y个变量可以不相等,则输出YES,并限制他们不相等 :否则输出NO,并忽略此次操作. Input 输入一个数n表示操作的次数(n<=1*10^5) 接下来n行每行三个数x,y,p(x,y<=1*10^8,p=0 or 1) Output 对于n行操作,分别输出n行YES或者NO Input示例 3 1 2 1 1 3 1

51nod 1515 明辨是非 并查集+set维护相等与不等关系

考试时先拿vector瞎搞不等信息,又没离散化,结果好像MLE:后来想起课上讲过用set维护,就开始瞎搞迭代器...QWQ我太菜了.. 用并查集维护相等信息,用set记录不相等的信息: 如果要求变量不等,若不和并查集矛盾,就拿set互相记录一下,YES:矛盾就NO 如果要求变量相等, 1.x记录的不等的变量中有y,说明矛盾,NO 2.若祖先不等,那就合并两个变量所在的并查集(合并两个并查集的祖先),size大的并到小的上,set暴力转移集合不相等的信息,YES 否则YES #include<cs

[題解]51nod_1515_明辨是非

好久沒有話多了,是覺得有點浪費時間,今天考試和一中用的一樣的題,結果反而考得不好,不過Jackpei一句知恥而後勇點醒夢中人偷偷@Jackpei 就是這樣吧 還有我極度懷疑我的鍵帽打油了......我買了假的PBT還是我的手實在是太油了...... 強制在線,因為不等關係沒有傳遞性,於是用set維護不等關係,并查集維護相等關係, 合併時把set也合併掉,具體就是直接複製合併,複雜度可以接受,雖然並不會算 於是大力瞎搞,我調了半天錯在了合併set搞錯了,it本來就是s[xx]的迭代器,怎麼能和自己

转 离婚前夜悟出的三件事

文/铁眼(简书作者)原文链接:http://www.jianshu.com/p/832be4f659a0?utm_campaign=hugo&utm_medium=reader_share&utm_content=note著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 前两天,在一次吃饭的时候,感觉嘴里有异样,用牙签一挑,一颗智齿酥了,脱落下来.当时很惊恐,自己才30多点,牙齿就坏了,那时只有后悔的想法,如果再往回调两年时间,我一定好好认真的刷牙,保养好牙齿. 牙齿如此坚固