每日一题 day22 打卡

Analysis

离散化+并查集

先离散化所有的约束条件,再处理所有e=1的条件,将i的祖先和j的祖先合并到一个集合中;e=0时,如果i的祖先与j的祖先在同一个集合中,说明约束条件不成立,反之亦然。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define int long long
  6. #define maxn 1000000+10
  7. using namespace std;
  8. inline int read()
  9. {
  10. int x=;
  11. bool f=;
  12. char c=getchar();
  13. for(; !isdigit(c); c=getchar()) if(c=='-') f=;
  14. for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
  15. if(f) return x;
  16. return -x;
  17. }
  18. inline void write(int x)
  19. {
  20. if(x<){putchar('-');x=-x;}
  21. if(x>)write(x/);
  22. putchar(x%+'');
  23. }
  24. int T,n,num,flag;
  25. struct node
  26. {
  27. int xi,xj,e;
  28. }lim[maxn];
  29. int book[maxn*],f[maxn];
  30. inline bool cmp(node x,node y)
  31. {
  32. return x.e>y.e;
  33. }
  34. inline int find(int x)
  35. {
  36. if(f[x]==x) return x;
  37. return f[x]=find(f[x]);
  38. }
  39. signed main()
  40. {
  41. T=read();
  42. while(T--)
  43. {
  44. num=;
  45. flag=;
  46. memset(f,,sizeof(f));
  47. memset(lim,,sizeof(lim));
  48. memset(book,,sizeof(book));
  49. n=read();
  50. for(int i=;i<=n;i++)
  51. {
  52. lim[i].xi=read();
  53. lim[i].xj=read();
  54. lim[i].e=read();
  55. book[++num]=lim[i].xi;
  56. book[++num]=lim[i].xj;
  57. }
  58. sort(book+,book+num+);
  59. int new_num=unique(book+,book+num+)-book;
  60. for(int i=;i<=n;i++)
  61. {
  62. lim[i].xi=lower_bound(book+,book+new_num+,lim[i].xi)-book;
  63. lim[i].xj=lower_bound(book+,book+new_num+,lim[i].xj)-book;
  64. }
  65. sort(lim+,lim+n+,cmp);
  66. for(int i=;i<=new_num;i++) f[i]=i;
  67. for(int i=;i<=n;i++)
  68. {
  69. if(lim[i].e==)
  70. {
  71. int f1=find(lim[i].xi),f2=find(lim[i].xj);
  72. if(f1!=f2) f[f1]=f2;
  73. }
  74. else if(lim[i].e==)
  75. {
  76. int f1=find(lim[i].xi),f2=find(lim[i].xj);
  77. if(f1==f2)
  78. {
  79. flag=;
  80. printf("NO\n");
  81. break;
  82. }
  83. }
  84. }
  85. if(flag==) printf("YES\n");
  86. }
  87. return ;
  88. }

请各位大佬斧正(反正我不认识斧正是什么意思)

洛谷 P1955 [NOI2015]程序自动分析 题解的更多相关文章

  1. 洛谷P1955 [NOI2015] 程序自动分析 [并查集,离散化]

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

  2. 洛谷p1955[NOI2015]程序自动分析

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

  3. 【做题笔记】洛谷P1955[NOI2015]程序自动分析

    第一道蓝题祭- 注意到本题中判断的是下标,即,并不是真的判断 \(i\) 是否等于 \(j\) 显然考虑并查集,把所有标记为"相等"的数放在一个集合里,然后最后扫一遍每个数,如果有 ...

  4. P1955 [NOI2015]程序自动分析

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

  5. 【luogu P1955 [NOI2015]程序自动分析】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1955 并查集操作,1e9要离散化,数组要开大一些,操作前先执行合并操作 样例好毒啊(全是排好序的) #inc ...

  6. Luogu P1955 [NOI2015]程序自动分析

    又一次做了这道题,感慨万千. 记得寒假时,被cmd2001点起来讲这道题,胡言乱语..受尽鄙视(现在也是好吗)..后来下课想A掉,可是3天下来总是错...后来抄了分题解就咕咕了... 今天老师留了这道 ...

  7. P1955 [NOI2015]程序自动分析[离散化+并查集]

    大水题一道,不明白为什么你谷评了个蓝.一看就是离散化,先去满足相等的条件,相等即为两点联通,或者说在同一个集合内.再看不相等,只有两元素在同一集合才不满足.裸的disjoint-set直接上,常数巨大 ...

  8. codevs4600 [NOI2015]程序自动分析==洛谷P1955 程序自动分析

    4600 [NOI2015]程序自动分析  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 在实现 ...

  9. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

随机推荐

  1. TZOJ5697: 数据结构实验:归并排序

    #include<stdio.h> #include<stdlib.h> void merge(int a[], int start,int mid,int end) { )) ...

  2. SpringBoot打成jar包后无法读取resources资源文件

    在项目中做了一个支付功能, 需要引入第三方渠道的配置文件config.xml用来初始化文件证书, 将配置文件 config.xml 放到 resources 资源目录下. 本地开发环境下能正常读取该文 ...

  3. .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态

    原文:.NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态 在 Windows 系统中,一段时间不操作键盘和鼠标,屏幕便会关闭,系统会进入睡眠状态.但有些程序(比如游戏.视频和演示文稿)在运行过程中应该 ...

  4. (八) Docker 部署 mongodb

    参考并感谢 官方文档 https://hub.docker.com/_/mongo 下载mongo镜像(不带tag标签则表示下载latest版本) docker pull mongo 启动 mongo ...

  5. PowerShell命令批量添加、导出AD用户

    导入单个AD用户命令 New-ADUser -Name "周八" -Surname "周" -GivenName "八"-SamAccoun ...

  6. 【错误集】类ExcelExport是公共的, 应在名为 ExcelExport.java 的文件中声明

    检查类名是否相同 区分大小写,复制代码的时候会连类名也复制了,哈哈哈,总结一下

  7. C++线程同步与互斥总结

    互斥:当多个线程访问同一个全局变量,或者同一个资源(比如打印机)的时候,需要进行线程间的互斥操作来保证访问的安全性. 临界区.互斥体.事件和信号量都可以实现线程互斥.但如果仅仅需要实现互斥功能,推荐前 ...

  8. robot framework笔记(二):在RF中自定义chrome启动参数

    (一)在RF中自定义chrome启动参数 这里主要是实现下面2个功能 1.禁用chrome正受自动测试软件控制的提示 2.设置默认的下载路径(一些导出.下载类的功能,将文件下载到指定路径下) 自定义一 ...

  9. python代码工具小结

    目录: 1.with读.写文件 (1)with读文件 (2)with写文件 2.requests爬虫 (1)get请求 (2)post请求 1.with读.写文件 (1)with读文件 (2)with ...

  10. excel合并日期和时间(转载)

    https://jingyan.baidu.com/article/d3b74d641669361f77e60914.html =TEXT(A2,"YYYY/M/D")&& ...