洛谷 P1955 [NOI2015]程序自动分析 题解
每日一题 day22 打卡
Analysis
离散化+并查集
先离散化所有的约束条件,再处理所有e=1的条件,将i的祖先和j的祖先合并到一个集合中;e=0时,如果i的祖先与j的祖先在同一个集合中,说明约束条件不成立,反之亦然。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
#define maxn 1000000+10
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int T,n,num,flag;
struct node
{
int xi,xj,e;
}lim[maxn];
int book[maxn*],f[maxn];
inline bool cmp(node x,node y)
{
return x.e>y.e;
}
inline int find(int x)
{
if(f[x]==x) return x;
return f[x]=find(f[x]);
}
signed main()
{
T=read();
while(T--)
{
num=;
flag=;
memset(f,,sizeof(f));
memset(lim,,sizeof(lim));
memset(book,,sizeof(book));
n=read();
for(int i=;i<=n;i++)
{
lim[i].xi=read();
lim[i].xj=read();
lim[i].e=read();
book[++num]=lim[i].xi;
book[++num]=lim[i].xj;
}
sort(book+,book+num+);
int new_num=unique(book+,book+num+)-book;
for(int i=;i<=n;i++)
{
lim[i].xi=lower_bound(book+,book+new_num+,lim[i].xi)-book;
lim[i].xj=lower_bound(book+,book+new_num+,lim[i].xj)-book;
}
sort(lim+,lim+n+,cmp);
for(int i=;i<=new_num;i++) f[i]=i;
for(int i=;i<=n;i++)
{
if(lim[i].e==)
{
int f1=find(lim[i].xi),f2=find(lim[i].xj);
if(f1!=f2) f[f1]=f2;
}
else if(lim[i].e==)
{
int f1=find(lim[i].xi),f2=find(lim[i].xj);
if(f1==f2)
{
flag=;
printf("NO\n");
break;
}
}
}
if(flag==) printf("YES\n");
}
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
洛谷 P1955 [NOI2015]程序自动分析 题解的更多相关文章
- 洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]
题目传送门 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或x ...
- 洛谷p1955[NOI2015]程序自动分析
题目: 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量 ...
- 【做题笔记】洛谷P1955[NOI2015]程序自动分析
第一道蓝题祭- 注意到本题中判断的是下标,即,并不是真的判断 \(i\) 是否等于 \(j\) 显然考虑并查集,把所有标记为"相等"的数放在一个集合里,然后最后扫一遍每个数,如果有 ...
- P1955 [NOI2015]程序自动分析
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...
- 【luogu P1955 [NOI2015]程序自动分析】 题解
题目链接:https://www.luogu.org/problemnew/show/P1955 并查集操作,1e9要离散化,数组要开大一些,操作前先执行合并操作 样例好毒啊(全是排好序的) #inc ...
- Luogu P1955 [NOI2015]程序自动分析
又一次做了这道题,感慨万千. 记得寒假时,被cmd2001点起来讲这道题,胡言乱语..受尽鄙视(现在也是好吗)..后来下课想A掉,可是3天下来总是错...后来抄了分题解就咕咕了... 今天老师留了这道 ...
- P1955 [NOI2015]程序自动分析[离散化+并查集]
大水题一道,不明白为什么你谷评了个蓝.一看就是离散化,先去满足相等的条件,相等即为两点联通,或者说在同一个集合内.再看不相等,只有两元素在同一集合才不满足.裸的disjoint-set直接上,常数巨大 ...
- codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析
4600 [NOI2015]程序自动分析 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 在实现 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
随机推荐
- mysq 连表更新
update table1 a left join table2 b on a.id = b.user_id left join table3 c on a.id = c.user_idset a.p ...
- python_二叉树简单实现
今日头条面试题,先做下: 二叉树代码实现 class Node: def __init__(self,item): self.item = item self.child1 = None self.c ...
- 「APIO2016」烟花表演
「APIO2016」烟花表演 解题思路 又是一道 solpe trick 题,观察出图像变化后不找一些性质还是挺难做的. 首先令 \(dp[u][i]\) 为节点 \(u\) 极其子树所有叶子到 \( ...
- 使用springboot实现一个简单的restful crud——03、前端页面、管理员登陆(注销)功能
前言 这一篇我们就先引入前端页面和相关的静态资源,再做一下管理员的登陆和注销的功能,为后续在页面上操作数据做一个基础. 前端页面 前端的页面是我从网上找的一个基于Bootstrap 的dashboar ...
- day33-python之多线程
1.多线程实例 # import threading # import time # # import threading import time class MyThread(threading.T ...
- 使用tmux管理终端的窗口
教程参考这里: http://louiszhai.github.io/2017/09/30/tmux/
- java web编程 servlet读取配置文件参数
新建一个servlet. 然后在web.xml文件里面自动帮助你创建好了<servlet-name><servlet-class><servlet-mapping> ...
- instanceof 和isInstance
Java中的instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边 ...
- scrapy 用pycharm调试
1. 用pycharm打开scrapy项目,随便右击一个.py文件,选择Debug "***" 2. pycharm 右上角点击刚才debug的文件,选择Edit Configur ...
- [daily] ssh通过私钥导出公钥
在使用key方式登录ssh服务的时候,我们知道ssh key是使用公钥ssh-keygen工具生成的. 有时候,我们只保存了私钥,但是并没有保存公钥.这个时候,可以使用如下方法, 从私钥中将公钥导 ...