博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ4025】二分图
阅读量:5934 次
发布时间:2019-06-19

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

Description

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

Input

输入数据的第一行是三个整数n,m,T。

第2行到第m+1行。每行4个整数u,v,start,end。

第i+1行的四个整数表示第i条边连接u,v两个点。这条边在start时刻出现。在第end时刻消失。

Output

输出包括T行。

在第i行中。假设第i时间段内这个图是二分图。那么输出“Yes”。否则输出“No”,不含引號。

Sample Input

3 3 3

1 2 0 2

2 3 0 3

1 3 1 2

Sample Output

Yes

No

Yes

HINT

例子说明:

0时刻,出现两条边1-2和2-3。

第1时间段内,这个图是二分图,输出Yes。

1时刻。出现一条边1-3。

第2时间段内,这个图不是二分图,输出No。

2时刻,1-2和1-3两条边消失。

第3时间段内,仅仅有一条边2-3,这个图是二分图,输出Yes。

数据范围:

n<=100000,m<=200000,T<=100000,1<=u,v<=n。0<=start<=end<=T。

Source

能够考虑用LCT维护一个以删除时间为关键字的最大生成树

同一时候维护一个边的集合表示在这个集合中的边假设在图中则一定不是二分图(就用一个数组就好了_ (:зゝ∠) _)
由二分图的定义可知 二分图是没有奇环的图
然后对于那两种操作:
对于插入,假设边的两端点不连通,连边后一定不会形成环,直接link上
假设已经联通,加边后一定存在非树边.此时假设加边后会形成奇环,就把这条边增加上述集合
删除时候对于树边直接删除,非树边在集合中则直接从集合中删除

事实上也能够用cdq+并查集来搞

详细做法没考虑过可是能够看Po姐姐的Blog

P.S.颓了那么久最终開始干正事了..

#include
#include
#include
#include
#include
#define MAXN 100010#define GET (ch>='0'&&ch<='9')#define MAXINT 0x3f3f3f3fusing namespace std;int n,m,T,Top,cnt;int sta[MAXN<<1],top;int In[MAXN<<1],on[MAXN<<1];struct splay{ int ch[2],fa,minn,st,sum,val; bool rev;}tree[MAXN<<2];inline void in(int &x){ char ch=getchar();x=0; while (!GET) ch=getchar(); while (GET) x=x*10+ch-'0',ch=getchar();}struct edge{ int u,v,w;}e[MAXN<<1];struct Edge{ int to; Edge *next;}E[MAXN<<2],*prev1[MAXN],*prev2[MAXN];inline void insert1(int u,int v) {E[++Top].to=v;E[Top].next=prev1[u];prev1[u]=&E[Top];}inline void insert2(int u,int v) {E[++Top].to=v;E[Top].next=prev2[u];prev2[u]=&E[Top];}inline bool is_root(int x){ return tree[tree[x].fa].ch[0]!=x&&tree[tree[x].fa].ch[1]!=x;}inline void push_down(int x){ if (tree[x].rev) { tree[tree[x].ch[0]].rev^=1,tree[tree[x].ch[1]].rev^=1; swap(tree[x].ch[0],tree[x].ch[1]); } tree[x].rev=0;}inline void push_up(int x){ tree[x].minn=tree[x].val;tree[x].st=x;tree[x].sum=x>n; if (tree[x].ch[0]) { if (tree[tree[x].ch[0]].minn
next) ins(i->to); for (Edge *i=prev2[x];i;i=i->next) del(i->to); puts(cnt?"No":"Yes"); }}

转载地址:http://llctx.baihongyu.com/

你可能感兴趣的文章
Linux 系统下各文件目录的含义
查看>>
如何导入批量的用户账号?
查看>>
System Center Operation Manager 2012(四) 安装额外MS
查看>>
Mysql For Windows安装图解
查看>>
Shader物体渲染前置效果(即:不被前面物体遮挡)
查看>>
2016年 CSS 库、框架和工具新生榜 TOP 50
查看>>
Linux帐号管理
查看>>
手把手教你搭建LyncServer2013之安装持久聊天服务器(十三)
查看>>
js中,全局变量与直接添加在window属性的区别
查看>>
人工智能与智能系统中的先驱人物
查看>>
动态ARP表项建立条件
查看>>
iOS scrollView 手动布局不能从顶部显示解决方法 oc or swift都是这个道理
查看>>
Scrapy items的介绍与使用
查看>>
React Native Android Gradle 编译流程浅析(一)
查看>>
陈松松:如何保证做出有价值的视频,让用户喜欢观看
查看>>
博为峰Java技术文章 ——JavaSE Swing使用数组和Vector创建下拉列表框
查看>>
linux rsync同步命令
查看>>
对apache中并发控制参数prefork理解和调优
查看>>
MP114配合微软UC简单DEMO
查看>>
framework
查看>>