NOI2015 程序自动分析

/*
十分简单的题面
离散化一下 然后并茶几一下就OK了
跑的死慢 可能还有更优的方法吧
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define maxn 1000010
using namespace std;
int T,n,m,s[maxn],t[maxn],fa[maxn],falg,num;
int init()
{
    int x=0;char s=getchar();
    while(s<‘0‘||s>‘9‘)s=getchar();
    while(s>=‘0‘&&s<=‘9‘){x=x*10+s-‘0‘;s=getchar();}
    return x;
}
int find(int x)
{
    if(x!=fa[x])fa[x]=find(fa[x]);
    return fa[x];
}
void merge(int a,int b)
{
    int r1=find(a);
    int r2=find(b);
    if(r1!=r2)fa[r1]=r2;
}
int main()
{
    T=init();
    while(T--)
      {
          n=0;map<int,int>to;num=0;
          memset(fa,0,sizeof(fa));
          m=init();int x,y,z;falg=0;
          for(int i=1;i<=m;i++)
            {
                x=init();y=init();z=init();
                int a=to[x];if(a==0){a=++n;to[x]=fa[a]=a;}
                int b=to[y];if(b==0){b=++n;to[y]=fa[b]=b;}
                if(z)merge(to[x],to[y]);
                else s[++num]=a,t[num]=b;
          }
        for(int i=1;i<=num;i++)
          {
              int a=s[i];int b=t[i];
              int r1=find(a);
            int r2=find(b);
            if(r1==r2)falg=1;
          }
        if(falg)printf("NO\n");
        else printf("YES\n");
      }
    return 0;
}
时间: 2024-10-22 16:03:38

NOI2015 程序自动分析的相关文章

bzoj4195[Noi2015]程序自动分析

bzoj4195[Noi2015]程序自动分析 题意: t组数据,每组n个给出两个变量是相等还是不等的约束条件,要求判断是否能满足.n≤1000000,变量数量≤109 题解: 先离散化,然后只处理相等条件用并查集维护“相等集合”,接着对每个不相等条件判断是否在一个集合,是的话则说明不满足. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <queue&g

【BZOJ 4195】[Noi2015]程序自动分析

[Noi2015]程序自动分析 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 630  Solved: 270[Submit][Status][Discuss] Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述

bzoj 4195: [Noi2015]程序自动分析

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

【bzoj4195】[Noi2015]程序自动分析

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

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

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

[UOJ#127][BZOJ4195][NOI2015]程序自动分析

试题描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设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,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现在给出一些约束满足问题,请分别对它们

NOI2015 程序自动分析(luogu p1955)

原题链接:https://www.luogu.org/problem/show?pid=1955 夏令营的模拟考试题,今天才发现是NOI原题,没想到15年也有这样裸的题... 离散化一下,这样就能用并查集来处理问题,然后逐个判断,相等的就将其合并,不相等就判断是否真的不相等,如果已知两数相等,那么就能确定不可被满足. 除了离散化有点玄学之外,其他的倒是挺正常的并查集... #include<cstdio> #include<algorithm> using namespace st

NOI2015 程序自动分析 prog

何等水题 某神犇仿关押罪犯的写法 却写挂了  然而实际上并不需要补集之类的 1 #include<iostream> 2 #include<cstring> 3 #include<cstdlib> 4 #include<cstdio> 5 #include<algorithm> 6 7 using namespace std; 8 9 const int Maxn=100010; 10 int n; 11 struct Data{ 12 int