NOI 2015 DAY1 T1 程序自动分析 并查集+离散化

题意:暂且并没有链接

方法:并查集+离散化

解析:

国赛这道普及组难度的题我都不好意思写题解,

这道题的题意非常明了,一眼题..

其实就是把所有的要求sort一下,把令xi=xj的条件放在前面,令xi!=xj的条件放到后面就行了。

然后我们对于n个询问,先把所有的i,j离散化,这里我偷懒用了map

然后只需要将所有xi=xj的部分加到并查集里。

xi!=xj的部分看一下二者的祖先相不相同就行了,不相同就判断下一个,相同输出no;

代码:

这道题贴代码真是不好意思- -

#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 100100
using namespace std;
int tot;
int t;
int n;
int fa[N<<1];
map<int,int>m;
struct node
{
    int x,y,z;
}a[N];
int find(int x)
{
    if(fa[x]==x)return x;
    else fa[x]=find(fa[x]);
    return fa[x];
}
int cmp(node a,node b){return a.z>b.z;}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        tot=0;
        m.clear();
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
        }
        for(int i=1;i<=n;i++)
        {
            if(!m[a[i].x])m[a[i].x]=++tot;
            if(!m[a[i].y])m[a[i].y]=++tot;
        }
        for(int i=1;i<=tot;i++)fa[i]=i;
        int flag=0;
        sort(a+1,a+n+1,cmp);
        for(int i=1;i<=n;i++)
        {
            int x=m[a[i].x],y=m[a[i].y];
            int z=a[i].z;
            if(z==1)
            {
                int fx=find(x),fy=find(y);
                if(fx!=fy)
                {
                    fa[fx]=fy;
                }
            }else
            {
                int fx=find(x),fy=find(y);
                if(fx==fy){printf("NO\n");flag=1;break;}
            }
        }
        if(!flag)printf("YES\n");
    }
}  

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 01:01:18

NOI 2015 DAY1 T1 程序自动分析 并查集+离散化的相关文章

BZOJ 4195: [Noi2015]程序自动分析 [并查集 离散化 | 种类并查集WA]

题意: 给出若干相等和不等关系,判断是否可行 woc NOI考这么傻逼的题飞快打了一个种类并查集交上了然后爆零... 发现相等和不等看错了异或一下再叫woc90分 然后发现md$a \neq b, a \neq c,不能得到b = c$ 老老实实的把所有相等关系加并查集然后不等关系来判断吧,唉 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using

[BZOJ4195] [NOI2015] 程序自动分析 (并查集)

Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现在给出一些约束满足问题,请分别对它们

洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]

题目传送门 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x4≠x1,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现在给出一些约束满足问题,请分别对它们

bzoj4195 [Noi2015]程序自动分析——并查集

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4195 突然在这道大水题上WA了半天... 思路很简单,离线处理询问,先把 = 的都加到并查集里,再暴力判断 != 的: 然而WA了许多遍...对离散化还是太不熟悉了... 1.fa[] 数组的预处理!平时写的手熟,上来就 for(i=1;i<=n;i++),完全忘了离散化后怎样怎样了啊!! 2. unique 的时候需要 -1! 3. lower_bound 时不要多 -1! 代码如下:

POJ 2528 Mayor&#39;s posters 并查集+离散化做法

Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 49767 Accepted: 14434 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters

poj 1733 Parity game 并查集 离散化

点击打开链接题目链接 Parity game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6249   Accepted: 2413 Description Now and then you play the following game with your friend. Your friend writes down a sequence consisting of zeroes and ones. You cho

【并查集+离散化】BZOJ4195- [Noi2015]程序自动分析

[题目大意] 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现在给出一些约束满足问题,请分别对它们进行判定.

LNSYOJ201小胖的奇偶【并查集+离散化】【做题报告】

这道题是一个带权并查集 题目描述 huyichen和xuzhenyi在玩一个游戏:他写一个由0和1组成的序列. huyichen选其中的一段(比如第3位到第5位),问他这段里面有奇数个1 还是偶数个1.xuzhenyi回答你的问题,然后huyichen继续问. xuzhenyi有可能在撒谎.huyichen要检查xuzhenyi的答案,指出在xuzhenyi的第几个回答一定有问题. 有问题的意思就是存在一个01序列满足这个回答前的所有回答,而且不存在序列 满足这个回答前的所有回答及这个回答. 输

poj1733(种类并查集+离散化)

题目链接: http://poj.org/problem?id=1733 题意: 输入n表示有一个长度为n的0,1字符串, m表示接下来有m行输入, 接下来的m行输入中x, y, even表示第x到第y个字符中间1的个数为偶数个, x, y, odd表示第x到第y个字符中间1的个数为奇数个, 若m句话中第k+1是第一次与前面的话矛盾, 输出k; 思路: 若x, y之间1的个数为偶数个, 那么1~x 与1~y中1的个数同奇偶性, 反之则异奇偶性, 我们可以将其理解为若输入x, y, even, 即