博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 4195: [Noi2015]程序自动分析【并查集】
阅读量:4704 次
发布时间:2019-06-10

本文共 1516 字,大约阅读时间需要 5 分钟。

等于有传递性,所以hash一下把等于用并查集连起来,然后再判断不等于是否合法即可

#include
#include
#include
#include
using namespace std;const int N=200005;int T,n,x,y,v,f[N],g[N],tot,has;bool fl; map
mp;struct qwe{ int a,b,o; }a[N];int read(){ int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f;}int zhao(int x){ return x==f[x]?x:f[x]=zhao(f[x]);}int main() { T=read(); while(T--) { n=read(); fl=0,tot=0,has=0; for(int i=1;i<=n;i++) { a[i].a=read(),a[i].b=read(),a[i].o=read(); g[++tot]=a[i].a,g[++tot]=a[i].b; } sort(g+1,g+1+tot); for(int i=1;i<=tot;i++) if(i==1||g[i]!=g[i-1]) mp[g[i]]=++has; for(int i=1;i<=n;i++) a[i].a=mp[a[i].a],a[i].b=mp[a[i].b]; for(int i=1;i<=has;i++) f[i]=i; for(int i=1;i<=n;i++) if(a[i].o) { int fu=zhao(a[i].a),fv=zhao(a[i].b); if(fu!=fv) f[fu]=fv; } for(int i=1;i<=n&&!fl;i++) if(!a[i].o&&zhao(a[i].a)==zhao(a[i].b)) fl=1; if(fl) puts("NO"); else puts("YES"); } return 0; }

转载于:https://www.cnblogs.com/lokiii/p/9649809.html

你可能感兴趣的文章
Wepy开发小程序文档
查看>>
搭建前后端分离网站
查看>>
111. Minimum Depth of Binary Tree
查看>>
PE学习
查看>>
ssh框架整合之注解版
查看>>
2018-2019-2 网络对抗技术 20165231 Exp7 网络欺诈防范
查看>>
去买电脑时注意的问题
查看>>
JSP和JavaBean
查看>>
1021 各位数统计
查看>>
CSS3 Filter详解(改变模糊度 亮度 透明度等方法)
查看>>
写XML
查看>>
Windows路由表详解
查看>>
程序员必备的七大面向对象设计原则(二)
查看>>
Log4j的常见用法
查看>>
mysql基本操作
查看>>
latex学习(二)
查看>>
基本MVVM 和 ICommand用法举例
查看>>
Selenium打开IE报错“Protected Mode settings...”解决方法
查看>>
Kubernetes学习之路(十一)之Pod状态和生命周期管理
查看>>
Discuz 手动 修改管理员密码
查看>>