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 x,y;
13     Data(int x=0,int y=0):x(x),y(y) {}
14 }q[Maxn][2];
15 int tot[2];
16 int seq[Maxn*2];
17 int hash(int x) {
18     return lower_bound(seq+1,seq+n*2+1,x) - seq;
19 }
20 int fa[Maxn*2];
21 int find(int x) {
22     return fa[x]==x?x:fa[x]=find(fa[x]);
23 }
24 bool merge(int x,int y) {
25     x=find(x);
26     y=find(y);
27     if(x==y) return 0;
28     return fa[x]=y,1;
29 }
30
31 void init() {
32     tot[0]=tot[1]=0;
33     scanf("%d",&n);
34     for(int i=1;i<=n*2;i++) fa[i]=i;
35     int x,y,e;
36     for(int i=1;i<=n;i++) {
37         scanf("%d%d%d",&x,&y,&e);
38         seq[i*2-1]=x;
39         seq[i*2]=y;
40         q[++tot[e]][e] = Data(x,y);
41     }
42     sort(seq+1,seq+n*2+1);
43 }
44
45 bool check() {
46     for(int i=1;i<=tot[1];i++) {
47         merge(hash(q[i][1].x),hash(q[i][1].y));
48     }
49     for(int i=1;i<=tot[0];i++) {
50         int x=hash(q[i][0].x),y=hash(q[i][0].y);
51         if(find(x)==find(y)) return 0;
52     }
53     return 1;
54 }
55
56 int main() {
57     freopen("prog.in","r",stdin);
58     freopen("prog.out","w",stdout);
59
60     int T;
61     for(scanf("%d",&T);T--;) {
62         init();
63         if(check())puts("YES");
64         else puts("NO");
65     }
66
67     return 0;
68 }
时间: 2024-11-02 23:36:56

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

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,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满

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

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

【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,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现在给出一些约束满足问题,请分别对它们进行判定. 输

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; in

NOI2015 程序自动分析(luogu p1955)

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