「bzoj 4025: 二分图」
显然二分图没有奇环
于是考虑使用并查集维护一下看看是否存在奇环
我们可以考虑加权并查集,维护出\(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: 二分图」的更多相关文章
- bzoj 4025 二分图 分治+并查集/LCT
bzoj 4025 二分图 [题目大意] 有n个点m条边,边会在start时刻出现在end时刻消失,求对于每一段时间,该图是不是一个二分图. 判断二分图的一个简单的方法:是否存在奇环 若存在奇环,就不 ...
- [BZOJ 4025]二分图(线段树分治+带边权并查集)
[BZOJ 4025]二分图(线段树分治+带边权并查集) 题面 给出一个n个点m条边的图,每条边会在时间s到t出现,问每个时间的图是否为一个二分图 \(n,m,\max(t_i) \leq 10^5\ ...
- BZOJ 4025: 二分图 [线段树CDQ分治 并查集]
4025: 二分图 题意:加入边,删除边,查询当前图是否为二分图 本来想练lct,然后发现了线段树分治的做法,感觉好厉害. lct做法的核心就是维护删除时间的最大生成树 首先口胡一个分块做法,和hno ...
- BZOJ 4025 二分图(时间树+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4025 [题目大意] 给出一张图,有些边只存在一段时间,问在一个每个时间段, 这张图是否 ...
- bzoj 4025: 二分图
Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. 解题报告: ...
- bzoj 4025 二分图——线段树分治+LCT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4025 线段树分治,用 LCT 维护链的长度即可.不过很慢. 正常(更快)的方法应该是线段树分 ...
- 【刷题】BZOJ 4025 二分图
Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input ...
- bzoj 4025 二分图 lct
题目传送门 题解: 首先关于二分图的性质, 就是没有奇环边. 题目其实就是让你判断每个时段之内有没有奇环. 其次 lct 只能维护树,(反正对于我这种菜鸟选手只会维护树), 那么对于一棵树来说, 填上 ...
- 「bzoj 4184: shallot」
权限题 线段树分治加线性基 首先这个题要求删除线性基肯定是没法处理的 于是我们套上一个线段树分治 线段树分治就是一种能够避免删除的神仙操作 我们发现询问是对一个时间的单点询问,而每一个数存在的时间却是 ...
随机推荐
- org.apache.commons.lang.StringUtils
org.apache.commons.lang.StringUtils 作为jdk中lang包的补充 检查CharSequence是否为空,null或者空格 CharSequence (CharBuf ...
- 非法关闭idea后报错,插件无法正常加载解决方法
Problems found loading plugins: Plugin "GlassFish Integration" was not loaded: required pl ...
- Java基础——面向对象
Hello 大家好,我又来啦,今天我们来说说Java的面向对象. 还记得之前去面试几家公司的实习生职位,大部分面试官都问过我有关面向对象 的问题,不知道以后还会不会问,估计是不会了吧...(:3[▓▓ ...
- RESTful api 设计规范
该仓库整理了目前比较流行的 RESTful api 设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github,欢迎大家补充!! Table of Contents RESTful A ...
- CNN中卷积过程中padding的使用
1.podding='SAME'时,全0填充. 2.padding=“VALID”,不使用全0填充
- 前端学习之路之CSS (四)
Infi-chu: http://www.cnblogs.com/Infi-chu/ CSS盒子模型 概念:CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际 ...
- Web前端面试指导(十六):为什么要初始化CSS样式?
题目点评 这个题目乍一看感觉怪怪的,什么叫初始化样式了?如果换一句话你可能就理解了,就是通用样式.这道题目主要涉及的是理论方面的知识,不用写代码,只要描述清楚就可以了 初始化样式的原因 因为浏览器的兼 ...
- 已有Web项目添加Maven支持
IDE:MyEclipse 当我们在现有的Web开发项目中集成 Maven 的时候,需要修改以下几个地方: 1.将以下代码拷贝到工程根路径下的 .project 文件中的 <buildSpec& ...
- eclipse调试 10个技巧
先提三点 不要使用System.out.println作为调试工具 启用所有组件的详细的日志记录级别 使用一个日志分析器来阅读日志 1.条件断点 想象一下我们平时如何添加断点,通常的做法是双击行号的左 ...
- 关于eclipse连接外置android模拟器
1.win+R,输入cmd,打开命令提示符 2.cd D:\Java(安卓应用开发)\adt-bundle-windows-64\sdk\platform-toolsadb connect 127.0 ...