~{→看不见LaTex格式的Dalao们请刷新本页Thanks♪(・ω・)ノ←}~
2019寒假集训题
B.二分图
题面
神犇有一个$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
$1\le n\le 100000,1\le m\le 200000,1\le T\le 100000,1\le u,v\le n,0\le start\le end\le T。$
Sample Explain
0时刻,出现两条边1-2和2-3。
第1时间段内,这个图是二分图,输出Yes。
1时刻,出现一条边1-3。
第2时间段内,这个图不是二分图,输出No。
2时刻,1-2和1-3两条边消失。
第3时间段内,只有一条边2-3,这个图是二分图,输出Yes。
如题:二分图的话,就等价于不存在奇环,我们直接线段树分治,用并查集维护每个点与根节点间的距离即可。
我们建立一棵线段树,用时间轴来当做线段树的左右端点,每一条边出现消失的时间区间就对应着线段树上的一对$[l,r]$,将每一条边插到对应的时间区间中,最后统计答案时,只要用线段树分治,从$[1,r_{max}]$各个点都依次访问,存储答案,最后输出。
当然了,由于我们要支持撤销操作,所以不能将并查集路径压缩,这样就没有办法撤销了。
具体操作见代码吧。
Code
1 |
|