这题?说实话,我觉得挺强的(毕竟我WA了8次,是我太cai)。

  开头放题目。


  首先,这是一道并查集的题目,不知道你看出来没有(反正我一开始想歪了)。

  既然知道是并查集,那就是一道小破题了啊。

  首先,很容易想到把所有e==1的操作放在前面,然后再进行e==0的操作。而在进行e==1的操作的时候,我们只要把它约束的两个变量放在同一个集合里面即可。在e==0,即存在一条不相等的约束条件,对于它约束的两个变量,如果在一个集合里面,那就不可能满足的啊。如不相等的约束条件都满足,那就YES。

  然而并没有那么简单。不然为什么会是 省选

  当我们看到数据范围->10的9次方.......(我哭了,你们呢?)

  别告诉我你想开一个10的9次方的fa数组的话,MLE欢迎你。超限就凉凉啊(是我亲身经历,欢迎模仿)。

  所以这时候离散化就来了啊。


离散化三部曲

  1. 去重。
  2. 排序。
  3. 二分。

  一个unique再加lower_bound,最后再sort一下,完事。()

  没学过的看这里(是我学离散化时看的博客)->https://www.cnblogs.com/cytus/p/8933597.html


又到了放代码的时候啊........

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;const int MA=2e5+50;
int n,tot;
struct ss{int i,j,e;
}ys[MA];
int a[MA],fa[MA];
bool flag;inline int read() {int res = 0; bool bo = 0; char c;while (((c = getchar()) < '0' || c > '9') && c != '-');if (c == '-') bo = 1; else res = c - 48;while ((c = getchar()) >= '0' && c <= '9') res = (res << 3) + (res << 1) + (c - 48);return bo ? ~res + 1 : res;
}int cmp(ss a,ss b) {if(a.e==b.e) return a.i<b.i;return a.e>b.e;
}int fi(int x) {if(fa[x]==x) return x;return fa[x]=fi(fa[x]);
} void mem() {tot=0;memset(a,0,sizeof a);memset(ys,0,sizeof ys);memset(fa,0,sizeof fa);flag=0;
}int main()
{int t;t=read();while(t--) {mem();n=read();for(register int i=1;i<=n;i++) {ys[i].i=read();ys[i].j=read();ys[i].e=read();a[++tot]=ys[i].i;a[++tot]=ys[i].j;}sort(a+1,a+tot+1);int con=unique(a+1,a+tot+1)-a; for(register int i=1;i<=n;i++) {ys[i].i=lower_bound(a+1,a+con+1,ys[i].i)-a;ys[i].j=lower_bound(a+1,a+con+1,ys[i].j)-a; }for(register int i=1;i<=con;i++) fa[i]=i;sort(ys+1,ys+n+1,cmp);for(register int i=1;i<=n;i++) {int x=fi(ys[i].i);int y=fi(ys[i].j);if(ys[i].e) fa[x]=y;else if(x==y) {printf("NO\n");flag=1;break;}}if(!flag) printf("YES\n");}return 0;
}

我的这个算法 ->2663ms.(据说超级慢,但是是正解)

然后呢这里还要介绍一下同组大佬的另一种方法(是不用离散化的........神犇方法QAQ).->300ms

https://baka.online/noi2015%E7%A8%8B%E5%BA%8F%E8%87%AA%E5%8A%A8%E5%88%86%E6%9E%90/

欢迎大家去看啊(毕竟我还是菜)。

谢谢观看。

转载于:https://www.cnblogs.com/qxyzili--24/p/10426009.html

【并查集】NOI2015 洛谷 P1955 程序自动分析相关推荐

  1. 并查集——营救(洛谷 P1396)

    题目选自洛谷P1396 看到最大的最小很多人想到二分,但是可以有更好的解法. 我们不妨用并查集维护这个图,将边从小到大排序,每次取出边权最小的边,若该边的起点与终点未在一个集合内,就将其合并.当源点与 ...

  2. 并查集——团伙(洛谷 P1892)

    题目选自洛谷P1892 最基础的并查集是给出关系直接合并,这道题呢稍微多了一些条件,就是敌人的敌人也是自己的朋友,所以在合并的时候多了几步操作. 首先,要充分理解题目. "敌人的敌人就是朋友 ...

  3. 并查集——集合(洛谷 P1621)

    题目选自洛谷P1621 一道并查集类型的算法题,基本框架不变,就是合并的时候怎么合并,合并哪些数? 筛出素数之后找出在 'p~b' 范围内的素数 然后枚举a~b之间的数,合并他们 最后看看那些数的祖先 ...

  4. 并查集——亲戚(洛谷 P1551)

    题目选自洛谷P1551 并查集入门题目,简单有趣的例子了解并查集的使用 主要分为三个操作: 1)初始化 没有什么说的,就是用下标当做标号. 2)合并操作 如果两个关系的"老大"不一 ...

  5. 并查集——家谱(洛谷 P2814)

    题目选自洛谷P2814 由于是字符串保存名字,使用数字对应数组来合并查找有一点麻烦,所以使用map将对应关系存起来即可. 因为map带有映射关系,好像不需要再写初始化和合并操作,用两个字符串变量,一个 ...

  6. 并查集——程序自动分析(洛谷 P1955)

    题目选自洛谷P1955 比较复杂一点的并查集题目,还用到了离散化的思想 首先明确一点:相等具有传递性,不相等不具有传递性(Eg:若x1等于x2,x2等于x3时,显然x1=x3.但当x1不等于x2,x2 ...

  7. 洛谷 P1955 [NOI2015]程序自动分析(沙雕题)

    题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3-代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相 ...

  8. 程序自动分析(洛谷-P1955)

    题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...

  9. mst算法matlab_基于并查集+Kruskal算法的matlab程序及最小生成树绘图

    学了一天最小生成树,稍稍总结一下,这是第一篇 kruskal算法 关于kruskal算法已有大量的资料,不再赘述,算法流程为: 得到邻接矩阵和权值: 初始化,连接距离最小的两点: 连接距离次小的两点, ...

  10. 0x41.数据结构进阶 - 并查集

    目录 一.路径压缩与按秩合并 1.AcWing 237. 程序自动分析(NOIP2015) 二.边带权并查集 1.AcWing 238. 银河英雄传说(边带权并查集模板) 2.AcWing 239. ...

最新文章

  1. vue 设置输入法隐藏_原来iPhone自带的输入法这么强大?好多人都不知道其中的隐藏功能...
  2. 完美解决Flask-Migrate使用SQLite生成自动迁移脚本的Bug
  3. 用VisualVM和JConsole监控tomcat性能
  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(一)
  5. 拼接SQL的一个技巧
  6. windows phone7 学习笔记06——数据绑定
  7. I/O接口标准(1):LVTTL、LVCMOS、SSTL、HSTL
  8. 8-5如何使用线程池
  9. linux上sftp工具使用
  10. 多粒度网络(MGN)的结构设计与技术实现
  11. 中国将在未来几十年主导电动汽车市场
  12. 为什么你一直学不好SEO优化?
  13. 华为4g模块测试软件,华为LTE 4G模块ME906E/华为FDD联通模块
  14. 教你怎么使用python批量下载图片
  15. Polar码引发舆论狂欢 5G标准远未定局
  16. opencv-Python 目标跟踪(一)《Meanshift算法、Camshift算法》
  17. ORA-00600 [ktspgfb-1]
  18. 实现一个小轮子:用AOP实现异步上传
  19. 联想Y7000--deepin深度操作系统安装出现的无线网卡驱动RTL8111/8168/8441问题---致搞了一整天的心
  20. 阿里云弹性裸金属服务器-神龙架构(X-Dragon)揭秘

热门文章

  1. REST API 的安全认证,我放弃OAuth 2.0 ,选择 JWT 令牌
  2. 亲,你们都在家办公吗?啥感受?hahaha
  3. c语言求一点到多点最短路径长度,C语言迪杰斯特拉实现最短路径算法(14页)-原创力文档...
  4. win10运行在哪里_90s安装新一代win10X!全新操作界面,完美兼容win7或win10程序
  5. ELKStack之操作深入(中)
  6. windows平台vs2010编译64位libiconv与libxml2
  7. HTML5 Canvas 绘制英国国旗
  8. Linux网络管理常用命令:net-tools VS iproute2
  9. BZOJ1119[POI2009]SLO BZOJ1697[Usaco2007 Feb]Cow Sorting牛排序
  10. 顶点计划一自行车组调查报告