题意:给出n个点,m条边,每条边有一个出现时间和一个消失时间,问从0-T的时间内,每个时间点的图是否是二分图

题解:

分治+并查集(按秩合并+带权)

众所周知的结论:二分图一定不存在奇环,存在奇环的图一定不是二分图

对时间分治,维护\([l,r]\)时间内存在的边,对每条边讨论:

1、当前边的起止时间刚好与\([l,r]\)相等,那么判断这条边所在的连通块是否构成奇环(让结点带权,记一下到根要经过奇数条边还是偶数条边即可),若成奇环,则\([l,r]\)时间内都为"No",否则这条边加入图中

2、若终止时间小于等于mid,则划分到左区间

3、若起始时间大于mid,则划分到右区间

4、否则两个区间一起丢

当l==r时,则输出"Yes"

注意:回溯时并查集要恢复到进入前的状态

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#define ll long long
#define N 100010
using namespace std;int n,m,T,top;
int stk[N],fa[N],dis[N],rank[N];struct Node {int x,y,s,t;};vector<Node> ve;int gi() {int x=0,o=1; char ch=getchar();while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();if(ch=='-') o=-1,ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return o*x;
}int find(int x) {return x==fa[x]?x:find(fa[x]);
}int get_dis(int x) {int ret=0;while(x!=fa[x]) ret^=dis[x],x=fa[x];return ret;
}void unite(int x, int y, int z) {int xx=find(x),yy=find(y);if(xx==yy) return;if(rank[yy]>rank[xx]) swap(xx,yy);if(rank[yy]==rank[xx]) rank[xx]++,stk[++top]=-xx;fa[yy]=xx,dis[yy]=z,stk[++top]=yy;
}void restore(int now) {while(top>now) {if(stk[top]<0) rank[-stk[top]]--;else fa[stk[top]]=stk[top],dis[stk[top]]=0;top--;}
}void bs(int l, int r, vector<Node> &e) {int mid=(l+r)>>1,now=top,sz=e.size();vector<Node> vl,vr;for(int i=0; i<sz; i++) {Node u=e[i];int x=u.x,y=u.y;if(l==u.s && r==u.t) {int xx=find(x);int yy=find(y);int zz=get_dis(x)^get_dis(y)^1;if(xx!=yy) unite(x,y,zz); else if(zz&1) {for(int j=l; j<=r; j++) puts("No");restore(now);return;}}else if(u.t<=mid) vl.push_back(u);else if(u.s>mid) vr.push_back(u);else vl.push_back((Node){x,y,u.s,mid}),vr.push_back((Node){x,y,mid+1,u.t});}if(l==r) puts("Yes");else bs(l,mid,vl),bs(mid+1,r,vr);restore(now);
}int main() {n=gi(),m=gi(),T=gi();for(int i=1; i<=n; i++) fa[i]=i;for(int i=1; i<=m; i++) {int x=gi(),y=gi(),s=gi()+1,t=gi();if(s>t) continue;ve.push_back((Node){x,y,s,t});}bs(1,T,ve);return 0;
}

转载于:https://www.cnblogs.com/HLXZZ/p/7625297.html

[bzoj4025] 二分图相关推荐

  1. bzoj4025: 二分图

    这题想不出来. 不浪费时间了. 以后找时间填. --------------------update--------------- 就是判奇环咯 然而LCT我搞不出来.. 是因为对于当前的最大生成树, ...

  2. 【知识点总结】【CSP考前复习】图论大杂烩【未完】

    序言 临近NOIP CSP-J 2019,不由得有些惆怅. 惆怅不是为了别的,主要是觉得从接触信息学竞赛开始,这已经是四个年头了,却一直拿的是二等奖.而今年是我最后的机会.如果不能成功,那自然就是AF ...

  3. 每周记录(4月底停更了qvq)

    1月6日 旋转卡壳 闵可夫斯基和 1月13日 期末复习 1月20日 网络流前4道题 一场失败的期末考试 写寒假作业 bzoj [HNOI2008]明明的烦恼(90分) prufer序列 正睿 画画图 ...

  4. 【BZOJ4025】二分图(可撤销并查集+线段树分治)

    题目: BZOJ4025 分析: 定理:一个图是二分图的充要条件是不存在奇环. 先考虑一个弱化的问题:保证所有边出现的时间段不会交叉,只会包含或相离. 还是不会?再考虑一个更弱化的问题:边只会出现不会 ...

  5. 【bzoj4025】二分图 LCT

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

  6. [BZOJ 4025] 二分图

    题目传送-BZOJ4025 题意: 有一张\(n\)个节点的无向图,其中边\(i\)在\(s_i\)出现,\(e_i\)结束,并连接着节点\(x,y\). 并保证\(s_i < e_i \le ...

  7. POJ - 3041 Asteroids 二分图最小点覆盖

    题目链接 二分图一个很重要的定理:看了很多大神的博客表示看不懂为什么,以后再看 最小点覆盖=最大匹配 最小点覆盖就是在二分图里边,选择一个点,将所有与该点相链接的边删去,问最小找多少个点能够把所有的边 ...

  8. P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

    二分图最小不相交路径覆盖 #include<bits/stdc++.h> using namespace std; const int MAXN = 5550; const int MAX ...

  9. 图论:关于二分图的总结(转载)

    二分图是这样一个图,它的顶点可以分类两个集合X和Y,所有的边关联在两个顶点中,恰好一个属于集合X,另一个属于集合Y. 最大匹配:图中包含边数最多的匹配称为图的最大匹配. 完美匹配:如果所有点都在匹配边 ...

  10. c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...

    目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...

最新文章

  1. DOM---文档对象模型(Document Object Model)的基本使用
  2. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始
  3. ImportError:cannot import name ‘display‘ File “XX“, line 5, in <module> from IPython import display
  4. python day-15 匿名函数 sorted ()函数 filter()函数 map()函数 递归 二分法...
  5. DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本
  6. 1.14 java内部类是什么鬼东西
  7. 【caffe解读】 caffe从数学公式到代码实现4-认识caffe自带的7大loss
  8. 数组和指针、数组指针和指针数组
  9. 对领域驱动设计的理解与实践
  10. NYNU_省赛选拔题(10)
  11. 背景图片的位置(HTML、CSS)
  12. mysql的root用户无法给普通用户授权问题处理
  13. ChipScope用法总结
  14. opencv快速下载
  15. php pwuj 挂马,网站挂马原理及实战
  16. 固定成本、可变成本、沉没成本、机会成本
  17. 如何快速准确的验证QQ邮箱是否开通,是否存在?
  18. python arp_Python中的Scapy初探之三-ARP中毒
  19. 数据文献相关数据库 (数学建模\学术论文)
  20. 为什么NoSQL数据库这么受欢迎?

热门文章

  1. Security+ 学习笔记25 硬件与数据安全
  2. OSPFv3中LSA详解(七)——Type4类LSA详解
  3. 局域网IP被抢占后如何强制夺回
  4. HDOJ--1869--六度分离(用三种算法写的,希望能比较出来他们之间的区别)
  5. 078、Docker 最常用的监控方案(2019-04-25 周四)
  6. WPF之DatePicker使其只能选择日期,不能输入日期
  7. 2015过年之前计划
  8. 百度竞价教程 借助百度热力图让你的效果翻10倍
  9. 可执行jar包的maven配置
  10. 报表统计(六) 访问数据库