题目

显然二分图没有奇环

于是考虑使用并查集维护一下看看是否存在奇环

我们可以考虑加权并查集,维护出\(x\)到\(fa_x\)的实际距离

由于我们只需要考虑奇偶性,于是我们处理出到根的路径异或一下就好了

之后是动态删边的问题,我们可以考虑线段树分治

于是我们需要在线段树分治的时候维护一个并查集,还需要支持撤回操作

我们只需要一个不路径压缩的启发式合并并查集就好了

代码

#include<cstdio>
#include<vector>
#define re register
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
std::vector<int> u[320005],v[320005],f[320005],st[320005];
int n,m,T,now,tp;
int ans[100005],fa[100005],h[100005],dis[100005];
void change(int l,int r,int x,int y,int i,int a,int b) {
if(x<=l&&y>=r) {u[i].push_back(a),v[i].push_back(b);return;}
int mid=l+r>>1;
if(x<=mid) change(l,mid,x,y,i<<1,a,b);
if(y>=mid+1) change(mid+1,r,x,y,i<<1|1,a,b);
}
inline int find(int x,int opt) {
if(!opt) now=0;
while(fa[x]!=x) now^=dis[x],x=fa[x];
return x;
}
inline int merge(int x,int y) {
tp=0;
if(h[x]<h[y]) {dis[x]=(now^1);fa[x]=y;return x;}
if(h[y]<h[x]) {dis[y]=(now^1);fa[y]=x;return y;}
h[x]++;fa[y]=x;tp=1;dis[y]=(now^1);return y;
}
inline void clear(int i) {
for(re int j=st[i].size()-1;~j;--j) {
int x=st[i][j];
h[fa[x]]-=f[i][j];fa[x]=x;
}
}
void solve(int l,int r,int i) {
for(re int j=0;j<u[i].size();j++) {
int xx=find(u[i][j],0),yy=find(v[i][j],1);
if(xx!=yy) st[i].push_back(merge(xx,yy)),f[i].push_back(tp);
else if(!now) {
for(re int k=l;k<=r;k++) ans[k]=1;
clear(i);return;
}
}
if(l==r) {clear(i);return;}
int mid=l+r>>1;
solve(mid+1,r,i<<1|1);solve(l,mid,i<<1);
clear(i);
}
int main() {
n=read(),m=read(),T=read();
for(re int i=1;i<=n;i++) fa[i]=i,h[i]=1;
for(re int x,y,s,t,i=1;i<=m;i++) {
x=read(),y=read(),s=read()+1,t=read();
if(s>t) continue;
change(1,T,s,t,1,x,y);
}
solve(1,T,1);
for(re int i=1;i<=T;i++) puts(ans[i]?"No":"Yes");
return 0;
}

「bzoj 4025: 二分图」的更多相关文章

  1. bzoj 4025 二分图 分治+并查集/LCT

    bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不 ...

  2. [BZOJ 4025]二分图(线段树分治+带边权并查集)

    [BZOJ 4025]二分图(线段树分治+带边权并查集) 题面 给出一个n个点m条边的图,每条边会在时间s到t出现,问每个时间的图是否为一个二分图 \(n,m,\max(t_i) \leq 10^5\ ...

  3. BZOJ 4025: 二分图 [线段树CDQ分治 并查集]

    4025: 二分图 题意:加入边,删除边,查询当前图是否为二分图 本来想练lct,然后发现了线段树分治的做法,感觉好厉害. lct做法的核心就是维护删除时间的最大生成树 首先口胡一个分块做法,和hno ...

  4. BZOJ 4025 二分图(时间树+并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4025 [题目大意] 给出一张图,有些边只存在一段时间,问在一个每个时间段, 这张图是否 ...

  5. bzoj 4025: 二分图

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. 解题报告: ...

  6. bzoj 4025 二分图——线段树分治+LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4025 线段树分治,用 LCT 维护链的长度即可.不过很慢. 正常(更快)的方法应该是线段树分 ...

  7. 【刷题】BZOJ 4025 二分图

    Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input ...

  8. bzoj 4025 二分图 lct

    题目传送门 题解: 首先关于二分图的性质, 就是没有奇环边. 题目其实就是让你判断每个时段之内有没有奇环. 其次 lct 只能维护树,(反正对于我这种菜鸟选手只会维护树), 那么对于一棵树来说, 填上 ...

  9. 「bzoj 4184: shallot」

    权限题 线段树分治加线性基 首先这个题要求删除线性基肯定是没法处理的 于是我们套上一个线段树分治 线段树分治就是一种能够避免删除的神仙操作 我们发现询问是对一个时间的单点询问,而每一个数存在的时间却是 ...

随机推荐

  1. Rust by Example1

    最近在学习Rust,想通过这个记录一下学习过程 首先是老规矩:HelloWorld // Rust单行注释 /// 文档注释 /*     多行注释 */ fn main() {     // 这是个 ...

  2. VS中自定义C#快速简写代码

     首先在VS中找到工具——代码片段管理器——语言选择(CSharp)——Visual C#——赋值路径——根据路径找到对应的代码片段用VS打开 修改: Title——标题 ShortCut——缩写 D ...

  3. C# XML创建解析、XML格式化

    导入命名空间: VS需要在项目中添加引用system.XML; 代码中添加 using System.XML和using System.IO; XML范例: <?xml version=&quo ...

  4. JavaScript数组的三种定义方法

    数组的定义: <script type="text/javascript"> // <!--声明数组--> // 1.先声明数组长度,后进行赋值 var a ...

  5. sql = 和<>遵循的sql-92标准的设置SET ANSI_NULLS ON

    说明 SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE. 当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空 ...

  6. MapReduce详解和WordCount模拟

    最早接触大数据,常萦绕耳边的一个词「MapReduce」.它到底是什么,能做什么,原理又是什么?且听下文讲解. 是什么 MapReduce 即是一个编程模型,又是一个计算框架,它充分采用了分治的思想, ...

  7. Java开篇

    首先致敬Java之父:JAMES GOSLING 一.什么是JDK,JRE,JVM?     1.JDK(Java Development Kit) Java开发工具包.        JDK = 开 ...

  8. UVA1185 Big Number

    题目大意:求十进制下x!的位数 这题其实就是要求\(\lg\)函数值的前缀和啊 对于一个数x,若\(\lg x=y\),则其位数为\(\lfloor y+1 \rfloor\) 然后对于对数,我们有\ ...

  9. BZOJ1258 [CQOI2007]三角形

    Description 画一个等边三角形,把三边的中点连接起来,得到四个三角形,把它们称为T1,T2,T3,T4,如图1.把前三个三角形也这样划分,得到12个更小的三角形:T11,T12,T13,T1 ...

  10. 【数据库】10.0 MySQL常用语句(一)

    显示数据库语句: SHOW DATABASES    只是显示数据库的名字 显示数据库创建语句: SHOW CREATE DATABASE db_name 数据库删除语句: DROP DATABASE ...