首页 > 其他分享 >约束条件

约束条件

时间:2023-07-29 12:12:14浏览次数:24  
标签:约束条件 int edges x2 YES x1

题目描述

在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。

考虑一个约束满足问题的简化版本:假设x1x2x3…代表程序中出现的变量,给定n个形如  x1= x2或 x1 <> x2  的变量相等或不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。例如,一个问题中的约束条件为:x1=x2,x2=x3,x1<>x3,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。现在给出一些约束满足问题,请分别对它们进行判定。

输入格式

输入的第一行包含一个正整数 t,表示需要判定的问题个数。注意这些问题之间是相互独立的。

对于每个问题,包含若干行:

第一行包含一个正整数 n,表示该问题中需要被满足的约束条件个数。接下来 n行,每行包括三个整数x,y,e ,描述一个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1 ,则该约束条件为x1=x2 。若 e=0,则该约束条件为x1<>x2 。

输出格式

输出包括t 行。

输出文件的第k行输出一个字符串 YES 或者 NO(字母全部大写),YES 表示输入中的第 k个问题判定为可以被满足,NO 表示不可被满足。

样例

样例输入 1

2
2
1 2 1
1 2 0
2
1 2 1
2 1 1

样例输出 1

NO
YES

样例输入 2

2
3
1 2 1
2 3 1
3 1 1
4
1 2 1
2 3 1
3 4 1
1 4 0

样例输出 2

YES
NO

数据范围与提示

对于100%  的数据,1<=t<=10,1<=n<=1e6,e是0或1,1<=i,j<=1e9。

 

分析:并查集经典题

先合并所有e=1的条件,再判断e=0的条件是否合法。

1e6个条件不多,但条件中的i,j很大,达1e9,每个条件2个数,所以最多只有2e6个不同的数,所以可以做个离散化。

参考代码:

 
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define re register 
 4 #define LL long long
 5 const int MAXN = 1e6+10;
 6 
 7 int T,fa[2*MAXN];
 8  
 9 inline int find(int x){
10     if(fa[x]==x) return x;
11     return fa[x]=find(fa[x]);  
12 }
13  
14 struct nod1{int x,y,e;}edges[MAXN]; 
15 inline int cmp1(nod1 a,nod1 b) {
16     if(a.e==b.e) return a.x<b.x;
17     return a.e>b.e;
18 } 
19 // 先处理相等的情况,再处理不等的情况 
20 
21 int main() {     
22     cin>>T;
23     while(T--){
24         
25         map<int,int>M2idx;
26         int n;cin>>n;        
27         for (re int i=1;i<=n;i++) {
28             int x,y,e;
29             cin>>x>>y>>e;
30             M2idx[x]=1;M2idx[y]=1; 
31             edges[i].x=x;edges[i].y=y;edges[i].e=e;    
32         }  
33                 
34         //离散化 
35         int idx=0 ;       
36         for(auto it:M2idx){
37            M2idx[it.first]=++idx; 
38            fa[idx]=idx; 
39         }
40         sort(edges+1,edges+1+n,cmp1);
41         
42         string res="YES";
43         for (re int i=1;i<=n;i++) { 
44                           
45            int x=M2idx[edges[i].x],y=M2idx[edges[i].y],e=edges[i].e;
46            
47            int fax=find(x);int fay=find(y);
48            
49            if(e==1){
50                 if (fax!=fay) {fa[fax]=fay;}
51            }
52            else if(fax==fay){
53                   res="NO";
54                   break; 
55            }         
56         }
57         cout<<res<<endl;
58     }
59         
60     return 0;
61 }

 

 

标签:约束条件,int,edges,x2,YES,x1
From: https://www.cnblogs.com/flatte/p/17589599.html

相关文章

  • Oracle 主键冲突报错踩坑-- "ORA-00001: 违反唯一约束条件 "
    根本原因因为特殊字符存在导致的主键冲突报错细节分析前提oracle中存在一张table,table中存在字段CName(nvarchar),且该字段为唯一主键;具体现有一条数据需要入库,内容如下'中信建投惠享债券型证券投资基金​'(包含零宽空格符)直接根据这个字段值查询数据库值是不存在的sel......
  • SQL的约束条件
    约束条件就是在数据类型的基础上再添加限制条件1.unsigned:去除符号eg:createtable表名(字段名数据类型unsigned)2.zerofill:零填充例如数据类型中字符串的char()为定长,当存入的不足括号中位数时,如果约束条件有zerofill,就用零来填充而不是空格3.notnull:非空#在my......
  • python之数据库: 约束条件
    约束条件"""约束条件的意思是,在数据类型的基础上再添加限制条件"""1.unsigned去除符号createtablet1(idintunsigned);2.zerofill3.notnull非空createtablet2(idint,namevarchar(16));以上例子15:#在mysql中,''和null不一样createtablet3(idi......
  • 数据完整性和约束条件
    数据完整性和约束条件表的数据有一定取值范围和联系,多表之间的数据有时也有一定的参照关系,在创建表和修改表时可以通过定义约束条件来保证数据的完整和一致性,在对数据进行插入,删除和修改时要对这些规则进行验证,从而起到约束作用。完整性包括数据完整性和参照完整性,数据完整......
  • 第三十八天 字符编码与配置文件,数据类型,约束条件
    一、数据库的分类关系型数据库 有固定的表结构、表与表之间可以建立数据库层面的关系 MySQLPostgreSQLMariaDBSQLserversqlitedb2非关系型数据库 没有固定的表结构、表与表之间没有数据库层面的关系 redismongodbmemcache二、环境变量的搭建1.环境变量2.系统服......
  • nsga2-带约束条件的多目标优化
    logiccodeclcclearcloseall%%定义自变量范围nvar=5;nobj=2;npop=20;maxit=50;pc=0.8;nc=round(pc*npop/2)*2;mu=0.05;%自变量约束条件varmin=[1030.66];varmax=[132.8211.641];%自变量变化步长step=[10.10.50.051];len=(varmax-varmin).*step;......
  • 带约束条件的运筹规划问题求解(模拟退火算法实现)
    0.写在前面超级简单的模拟退火算法实现ε٩(๑>₃<)۶з搭配最简单的线性规划模型进行讲解!但是如果需要的话可以直接修改编程非线性问题哦(´つヮ⊂︎)1.模型描述及处理1.1线性规划模型\[max\,f(x)=10x_1+9x_2\]\(s.t.\)\[6x_1+5x_2\leq{60}\tag{1}\]\[10x_1+20x_2\leq{......
  • 分布式电源优化配置 二阶锥 考虑配电网二阶锥模型,运行主体包括光伏、微燃机以及负荷,创
    分布式电源优化配置二阶锥编程方法:采用matlab+yalmip编程,cplex或gurobi作为求解器。主要内容:考虑配电网二阶锥模型,运行主体包括光伏、微燃机以及负荷,创新性考虑敏感负荷及加权电压支撑能力指标,约束条件考虑潮流约束、电压电流约束、分布式电源容量约束、微燃机出力约束和光伏功......
  • MySQL约束条件介绍
    无符号、零填充unsigned #因为正负值符号会占用一个比特位,使用此约束条件可以去掉数字类型里面的正负值符号,之后相同数字类型会支持的正数范围会更大 idintunsigne......
  • 表约束条件 非空 默认值 唯一 主键 自增 外键的三种关系
    ·目录无符号unsigned零填充zerofill非空notnull添加表数据的方法字段默认可以为空给字段设置非空默认值default默认值配合非空使用唯一值unique单列唯一联合唯一......