Ex 5_26 变量约束是否能同时满足(并查集)_第九次作业

利用并查集进行处理,定义一个维护数组components,components[i]表示变量序号为i的变量所处的集合,首先处理相等的变量,把它们放入同一个集合中,最后再处理不相等变量,若两个不相等的变量处于同一个集合中,则不满足约束条件。

 1 package org.xiu68.ch05.ex9;
 2
 3 public class Ex5_26 {
 4
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         //变量约束集合,先给出相等约束,再给出不相等约束
 8         Constraint[] constraint=new Constraint[]{
 9             new Constraint(0,1,true),
10             new Constraint(1,2,true),
11             new Constraint(3,4,true),
12             new Constraint(4,5,true),
13             new Constraint(2,3,true),
14             new Constraint(0,5,false)
15         };
16         checkConstraint(6, constraint);   //约束不能同时满足
17     }
18
19     //varNum:变量的个数
20     //constraint:变量约束集合
21     public static void checkConstraint(int varNum,Constraint[] constraint){
22
23         int[] components=new int[varNum];    //并查集
24         for(int i=0;i<varNum;i++)
25             components[i]=i;
26
27         boolean isConstraint=true;
28         for(int i=0;i<constraint.length;i++){
29             int v1=constraint[i].value1;
30             int v2=constraint[i].value2;
31             //变量相等,放入同一个并查集中
32             if(constraint[i].isEqual==true){
33                 for(int j=0;j<components.length;j++){
34                     if(components[j]==v2)
35                         components[j]=components[v1];
36                 }
37             }else{
38                 //变量不相等且位于同一个并查集中,则不满足约束条件
39                 if(components[v1]==components[v2]){
40                     System.out.println("约束不能同时满足");
41                     isConstraint=false;
42                     break;
43                 }
44             }
45         }
46         if(isConstraint==true)
47             System.out.println("约束能同时满足");
48     }
49 }
50
51 class Constraint{
52     public int    value1;        //第value1个变量
53     public int  value2;        //第value2个变量
54     public boolean isEqual;    //是否相等
55
56     public Constraint(int value1, int value2, boolean isEqual) {
57         super();
58         this.value1 = value1;
59         this.value2 = value2;
60         this.isEqual = isEqual;
61     }
62 }

时间: 2024-10-02 17:59:00

Ex 5_26 变量约束是否能同时满足(并查集)_第九次作业的相关文章

Sql中常用的创建表 约束 主外键 增删改查的语句

创建数据库 1 USE master; 2 GO 3 --日记数据库 4 create database DiaryBase 5 on 6 ( 7 name=DiaryBase_Dat,--逻辑名称 8 FILENAME='c:\DiaryBase.log', 9 size=10MB, 10 maxsize=50MB, 11 FILEGROWTH=5MB 12 ) 13 log on 14 ( 15 name=DiaryBase_Log, 16 FILENAME='c:\DiaryBase.md

bzoj1202: [HNOI2005]狡猾的商人(并查集 差分约束)

1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4127  Solved: 1981[Submit][Status][Discuss] Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 Ai大于0时表示这个月盈利Ai 元,当 Ai小于0时表示这个月亏损Ai

对于差分约束系统的一些理解

[1]最短路如何建图? 差分约束系统是{di-dj<=u}的集合, 考虑将di-dj<=u变形为dj+u>=di, ∴结点i要满足所有的结点j的dj+u>=di, 那么必须至少取到min(dj+u),如果取得更大,就会矛盾. 于是这样就可以建最短路,求出一组取值. [2]这组取值有什么意义? 它通过最短路得到. 刚好满足了所有条件,约束得最紧密. 也就是说,它不唯一,任意的di可能可以更小,相对差就会变大. [2]这组取值的一个性质:可以平移 简略的证明:∵dj+u>=di,

2018JL省选记

又是一年省选.今年的我,依然好菜啊... [Day 0] 呼...好紧张,明天就省选了.下周就有学长退役了吧,机房又该恢复冷清了吧.只剩下为数不多的几个i7接送着来来往往的OIers.明天看我一顿暴力然后写中考卷. [Day 1] 早上听歌,Maps和Suger,还有什么Immortals,好好听啊.到了吉大教学楼,老妈给我flag(我看你能考多少分).见到了以后不知能否再次相见的学长们,感觉好亲切.还有依然耍帅穿的很少的潘老师.等待抽签,和GXZlegend和EdwardFrog扯淡.突然想见

培训补坑(day5:最小生成树+负环判断+差分约束)

补坑补坑((╯‵□′)╯︵┻━┻) 内容真的多... 一个一个来吧. 首先是最小生成树. 先讲一下生成树的定义 生成树就是在一张图上选取一些边,使得整个图上所有的点都连通. 那么我们要求的最小生成树有两种算法可以求:1.prim算法,2.kruskal算法 我们先讲讲prim算法 prim算法有点像最短路中的dijstra,操作都几乎一样,原理就是从所有在队列中的点出发,找到最小的一条边,并把它连起来,这样子能够保证局部最优性. 在此我不讲这种算法,不过有兴趣的人可以去学一学. 我重点推出的是k

深度学习Trick——用权重约束减轻深层网络过拟合|附(Keras)实现代码

在深度学习中,批量归一化(batch normalization)以及对损失函数加一些正则项这两类方法,一般可以提升模型的性能.这两类方法基本上都属于权重约束,用于减少深度学习神经网络模型对训练数据的过拟合,并改善模型对新数据的性能.       目前,存在多种类型的权重约束方法,例如最大化或单位向量归一化,有些方法也必须需要配置超参数.       在本教程中,使用Keras API,用于向深度学习神经网络模型添加权重约束以减少过拟合.       完成本教程后,您将了解: 如何使用Keras

Oracle之绑定变量 2

绑定变量(bind variable)我们经常在写plsql中用到,那我们承接上一节的来看看在plsql中静态sql和动态sql在绑定变量的区别 declare     v_value_a varchar2(100);     v_value_b varchar2(100);     v_name  varchar2(50); begin     v_value_a := 'SMITH';     select e.ename/*+test*/into v_name from scott.emp

python3.X 复学(8)-----数据类型和变量(了解自身和变数)

一切都在变化中,我们能做的就是随时更新自己,适应时代的变数 ----------hashlinux 数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080

iOS 成员变量,实例变量,属性变量的区别,联系

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve