博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展域并查集经典题
阅读量:5290 次
发布时间:2019-06-14

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

题:https://www.luogu.org/problem/P2024

解析:https://blog.csdn.net/m0_37579232/article/details/79920785

#include
using namespace std;#define lson root<<1,l,midd#define rson root<<1|1,midd+1,rtypedef long long ll;const int M=5e4+4;int f[M],sta[M];//sta[i]==0表i与父亲同级, sta[i]==1表i被父亲吃,sta[i]==2表i吃父亲 int find(int x){ if(f[x]==x) return x; int y=f[x]; f[x]=find(f[x]); sta[x]=(sta[x]+sta[y])%3; return f[x];}bool check(int x,int y,int sign){ int a=find(x),b=find(y); if(a==b){ if(sign!=(sta[y]-sta[x]+3)%3)//+3防出现负数 ,可看作向量 return false; return true; } f[b]=a; sta[b]=(sta[x]-sta[y]+sign+3)%3; return true;}int main(){ int t; cin>>t; while(t--){ int n,m,countt=0; cin>>n>>m; for(int i=0;i<=n;i++) f[i]=i,sta[i]=0; while(m--){ int op,x,y; cin>>op>>x>>y; if(op==2&&(x==y)||x>n||y>n){ countt++; continue; } if(!check(x,y,op-1)) countt++; } cout<
<
View Code

 

转载于:https://www.cnblogs.com/starve/p/11503837.html

你可能感兴趣的文章
第二周
查看>>
断言简介
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>
数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
查看>>
使用pager进行分页
查看>>
吐医疗器械研发可配置性需求的槽点
查看>>
UVA - 1592 Database
查看>>
机器翻译评价指标 — BLEU算法
查看>>
机器学习基石(9)--Linear Regression
查看>>
Min Stack
查看>>
从LazyPhp说起
查看>>
Fine Uploader文件上传组件
查看>>
Spring Boot与Spring的区别
查看>>
查看linux 之mysql 是否安装的几种方法
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>