4195: 程序自动分析

Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 881 Solved: 380
[Submit][Status][Discuss]
Description

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

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

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

对于每个问题,包含若干行:
第1行包含1个正整数n,表示该问题中需要被满足的约束条件个数。
接下来n行,每行包括3个整数i,j,e,描述1个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1,则该约束条件为xi=xj;若e=0,则该约束条件为xi≠xj。
Output

输出文件包括t行。

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

2

2

1 2 1

1 2 0

2

1 2 1

2 1 1
Sample Output

NO

YES
HINT

在第一个问题中,约束条件为:x1=x2,x1≠x2。这两个约束条件互相矛盾,因此不可被同时满足。

在第二个问题中,约束条件为:x1=x2,x2=x1。这两个约束条件是等价的,可以被同时满足。

1≤n≤1000000

1≤i,j≤1000000000
写在前面:我是大煞笔
————————————————————————————————————————————————————————
思路:离散化后排序一下,直接并查集(千万别用食物链的方法做!!!不过应该没有人像我这么煞笔),离散化方法很多,我这里用的是取模大素数

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#define mod 50000017
using namespace std;
int t,n,father[1000010],dis[50000018];
struct os
{int x,y,z;
}b[1000010];
int in()
{int t=0;char ch=getchar();while (ch>'9'||ch<'0') ch=getchar();while (ch<='9'&&ch>='0') t=t*10+ch-'0',ch=getchar();return t;
}
int unions(int x,int y)
{father[x]=y;
}
int find(int x)
{if (father[x]!=x) father[x]=find(father[x]);return father[x];
}
int comp(os xx,os yy)
{return xx.z>yy.z;
}
main()
{t=in();for (int o=1;o<=t;o++){n=in();int k=0,flag=1;for (int i=1;i<=n;i++){b[i].x=in();b[i].y=in();b[i].z=in();if (!dis[b[i].x%mod]) dis[b[i].x%mod]=++k;if (!dis[b[i].y%mod]) dis[b[i].y%mod]=++k;}sort(b+1,b+n+1,comp); for (int i=1;i<=2*k;i++) father[i]=i;for (int i=1;i<=n;i++){int p=dis[b[i].x%mod],q=dis[b[i].y%mod];if (b[i].z==0) if (find(p)==find(q)) {printf("NO\n");flag=0;break;}if (b[i].z==1) unions(find(p),find(q));}if (flag) printf("YES\n");for (int i=1;i<=n;i++) dis[b[i].x%mod]=dis[b[i].y%mod]=0;}
}

【NOI2015】【codevs4600】【BZOJ4195】自动程序分析,我太弱了相关推荐

  1. 【翻译】Tricorder-谷歌如何建立程序分析的生态系统

    I. 介绍II. 背景A. 开发流程B. 谷歌的程序分析III. 谷歌程序分析理念A. 0误报率B. 授权用户做出贡献C. 改进数据驱动的可用性D. 工作流集成是关键E. 项目级别定制,而不是用户定制 ...

  2. 软件 2.0 时代的程序分析

    作者 | 张昕 整理 | 晴天 作者经历: 2020.9 – 现在,北京大学计算机系助理教授 2017.9 – 2020.8,美国麻省理工学院计算机与人工智能实验室博士后 2017,博士,美国佐治亚理 ...

  3. TBar:重新访问基于模板的自动程序修复

    TBar:重新访问基于模板的自动程序修复 摘要 我们回顾了基于模板的APR的性能,以构建关于修复模式有效性的全面知识,并强调了补充步骤(如故障定位或提供者代码检索)的重要性.为此,我们首先对文献进行调 ...

  4. Love Letter源程序 与程序分析

    Love Letter源程序 与程序分析 rem barok -loveletter(vbe) <i hate go to school> rem by: spyder / ispyder ...

  5. c语言报告程序分析报告,2012C语言程序分析报告.doc

    2012C语言程序分析报告 C语言程序设计专周 专 周 报 告 班级:10611 学号:20 姓名: 设计时间:2011-5-30至2011-6-3 一.设计题目:职工工资管理小软件 二.实习目的 1 ...

  6. 关闭Visual Studio中的自动代码分析

    背景 最近买了新电脑,于是安装了最新的Visual Studio 2019社区版(插说一句,其实像Visual Studio这么重要的编译器,因为被很多其他软件依赖,最好不要用最新的,可以用稍微晚一两 ...

  7. 当一个程序员面临太多选择的时候

    转眼间已经五天没有写博客,没有读/写代码了,人长大后为什么时间就过的这么快.记得小时候盼个周末放假都是那么的漫长.Anyway, 今天跟大家探讨一个问题:当程序员面临太多选择的时候. 不知道其它职业如 ...

  8. 红心大战c语言程序设计教程课后答案,[原创]Windows 红心大战随机发牌程序分析...

    [调试逆向] [原创]Windows 红心大战随机发牌程序分析 2007-11-27 23:28 13191 [调试逆向] [原创]Windows 红心大战随机发牌程序分析 2007-11-27 23 ...

  9. 程序崩溃 分析工具_程序分析工具| 软件工程

    程序崩溃 分析工具 A program analysis tool implies an automatic tool that takes the source code or the execut ...

最新文章

  1. url-pattern配置
  2. 解决哈希(HASH)冲突的主要方法
  3. MySQL多实例安装配置指南
  4. modelsim仿真
  5. ASP.NET与ASP.NET Core用户验证Cookie并存解决方案
  6. js 闭包作用(转自别人的)
  7. 全局安装gulp 报错问题解决
  8. 2021-02-02 天地图图层类型
  9. pip添加国内镜像源
  10. AJAX 框架Jquery的使用方法
  11. 概率扩散模型 Probabilistic Diffusion Model
  12. WGS84经纬度坐标与北京54坐标或者西安80坐标的关系-3
  13. 『GDAL』读写TIFF文件
  14. 备忘录形成html乱码,浏览器icloud网页版备忘录乱码不能显示中文汉字-企业网站设计之中的字体坑...
  15. “元宵”大师带你用Python量化交易
  16. ubuntu22.04安装搜狗输入法不出中文
  17. 2017年下半年中学综合素质问答题
  18. 使用 ffmpeg 转换视频格式 mp4 webm
  19. matlab力学实验,Matlab在力学课程课堂教学和虚拟实验中的应用
  20. elementui下拉选择框

热门文章

  1. androidh5混合开发_Android H5混合开发(3):原生Android项目里嵌入Cordova
  2. poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
  3. LeetCode-83: 删除排序链表中的重复元素
  4. WORD表格中文字显示不完整怎么办?
  5. 前台性能和服务器性能是什么,前端性能优化指南[2]--什么是Web性能?
  6. python数组内运算_有效的数学运算在Python中用cython进行小数组运算
  7. kettle 调用存储过程_Mysql存储过程
  8. 【java基础知识】设置表格内容居中显示,表格字体大小调整,表格列宽调整
  9. Hibernate执行Update操作之后查询跟新的语句出错
  10. java行转列_Java后端面试标准:如何准备一场后端面试?