首页 > TAG信息列表 > bzoj4025
bzoj4025-二分图【线段树分治,并查集】
正题 题目链接:https://darkbzoj.tk/problem/4025 题目大意 \(n\)个点\(m\)条边,每条边会在一个\(T\)以内的时间段内出现,对于任意一个\(T\)以内的时刻求图是否是一个二分图。 \(1\leq n,T\leq 10^5,1\leq m\leq 2\times 10^5\) 解题思路 插边就暴力插到线段树的对应区间位置,然后[bzoj4025] 二分图
题意: 有一张n个点的图,有m条边,每条边只在$[l,r]$时段内存在。 请你对每个时刻求出此时这张图是否是二分图。 $n,k\leq 10^{5},m\leq 2\times 10^{5}$。 题解: 首先二分图的充要条件是没有奇环。(不一定非得连通) 那么有一个套路的带权并查集判二分图的做法(不考虑时间的限制): 按任意[BZOJ4025]二分图(线段树分治+并查集)
Solution 以时间 \([0..T]\) 为下标建一棵线段树 线段树上的每个区间维护一个边集 对于一条边 \(i\),它存在的时间区间为: \([start_i,end_i-1]\) 把 \([start_i,end_i-1]\) 区间拆成线段树上的 \(O(\log T)\) 个区间 并且把边 \(i\) 丢进这些区间的边集 然后把整棵线段树 \(dfs\)【BZOJ4025】—二分图(线段树分治+带权并查集)
传送门 线段树分治水题 带权并查集维护一下到根的奇偶行就可以了 #include<bits/stdc++.h> using namespace std; const int RLEN=1<<20|1; inline char gc(){ static char ibuf[RLEN],*ib,*ob; (ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin)); return (ob==ib)?EO[bzoj4025] 二分图
Description 神犇有一个 \(n\) 个节点的图。因为神犇是神犇,所以在T时间内一些边会出现后消失。神犇要求出每一时间段内这个图是否是二分图。这么简单的问题神犇当然会做了,于是他想考考你。 Input 输入数据的第一行是三个整数 \(n\) , \(m\) , \(T\) 。 第2行到第 \(m+1\) 行,每行 4【BZOJ4025】二分图(LCT动态维护图连通性)
点此看题面 大致题意: 给你一张图以及每条边的出现时间和消失时间,让你求每个时间段这张图是否是二分图。 二分图性质 二分图有一个比较简单的性质,即二分图中不存在奇环。 于是题目就变成了:让你求每个时间段这张图是否不存在奇环。 \(LCT\)动态维护图连通性 关于\(LCT\),详见这篇博bzoj4025 二分图 [分治,并查集]
传送门 思路 是二分图的充要条件:图没有奇环。 考虑按时间分治,用可撤销并查集维护点到根的距离。 仍然可以用一个小trick把两点连边变成根连边,可以看这里。 每次连边时若不连通则连上,否则判一下有没有奇环。如果有输出“No”,否则不用连。 我tm把T写成m狂WA不止 #include<bits/stdc