bzoj4025二分图(线段树分治 并查集)
/*
思维难度几乎没有, 就是线段树分治check二分图
判断是否为二分图可以通过维护lct看看是否链接出奇环
然后发现不用lct, 并查集维护奇偶性即可
但是复杂度明明一样哈
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define f1 first
#define f2 second
#define ll long long
#define mmp make_pair
#define lson l, mid, now << 1
#define rson mid + 1, r, now << 1 | 1
#define ls now << 1
#define rs now << 1 | 1
#define M 100010
using namespace std;
int read() {
int nm = 0, f = 1;
char c = getchar();
for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
return nm * f;
}
vector<pair<int, int> > seg[M << 2];
int n, m, t, father[M], sz[M], ans[M], dis[M];
int find(int x) {
return father[x] == x ? x : find(father[x]);
}
int getdis(int x) {
return father[x] == x ? 0 : getdis(father[x]) ^ dis[x];
}
void modify(int l, int r, int now, int ln, int rn, pair<int, int> v) {
if(l > rn || r < ln) return;
if(l >= ln && r <= rn) {
seg[now].push_back(v);
return;
}
int mid = (l + r) >> 1;
modify(lson, ln, rn, v);
modify(rson, ln, rn, v);
}
void work(int l, int r, int now) {
int mid = (l + r) >> 1, f = 0;
vector<pair<int, int> > tmp;
for(int i = 0; i < seg[now].size(); i++) {
int vi = seg[now][i].f1, vj = seg[now][i].f2;
int a = find(vi), b = find(vj);
if(a == b) {
if((getdis(vi) ^ getdis(vj)) == 0) {
f = 1;
break;
}
} else {
if(sz[a] > sz[b]) swap(a, b), swap(vi, vj);
sz[b] += sz[a];
dis[a] = dis[vi] ^ dis[vj] ^ 1;
father[a] = b;
tmp.push_back(mmp(a, b));
}
}
if(!f) {
if(l == r) ans[l] = 1;
else work(lson), work(rson);
}
for(int i = tmp.size() - 1; i >= 0; i--) {
int a = tmp[i].first, b = tmp[i].second;
father[a] = a;
dis[a] = 0;
sz[b] -= sz[a];
}
}
int main() {
n = read(), m = read(), t = read();
for(int i = 1; i <= n; i++) father[i] = i, sz[i] = 1;
for(int i = 1; i <= m; i++) {
int vi = read(), vj = read(), be = read(), ed = read();
modify(1, t, 1, be + 1, ed, mmp(vi, vj));
}
work(1, t, 1);
for(int i = 1; i <= t; i++) puts(ans[i] ? "Yes" : "No");
return 0;
}
bzoj4025二分图(线段树分治 并查集)的更多相关文章
- [BZOJ4025]二分图(线段树分治,并查集)
4025: 二分图 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2191 Solved: 800[Submit][Status][Discuss] ...
- 2018.09.30 bzoj4025: 二分图(线段树分治+并查集)
传送门 线段树分治好题. 这道题实际上有很多不同的做法: cdq分治. lct. - 而我学习了dzyo的线段树分治+并查集写法. 所谓线段树分治就是先把操作分成lognlognlogn个连续不相交的 ...
- BZOJ4025 二分图(线段树分治+并查集)
之前学了一下线段树分治,这还是第一次写.思想其实挺好理解,即离线后把一个操作影响到的时间段拆成线段树上的区间,并标记永久化.之后一块处理,对于某个节点表示的时间段,影响到他的就是该节点一直到线段树根的 ...
- BZOJ3237:[AHOI2013]连通图(线段树分治,并查集)
Description Input Output Sample Input 4 5 1 2 2 3 3 4 4 1 2 4 3 1 5 2 2 3 2 1 2 Sample Output Connec ...
- Bzoj1018/洛谷P4246 [SHOI2008]堵塞的交通(线段树分治+并查集)
题面 Bzoj 洛谷 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治. 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内 ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)
传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...
- BZOJ3237 AHOI2013连通图(线段树分治+并查集)
把查询看做是在一条时间轴上.那么每条边都有几段存在时间.于是线段树分治就好了. 然而在bzoj上t掉了,不知道是常数大了还是写挂了. 以及brk不知道是啥做数组名过不了编译. #include< ...
- BZOJ4025 二分图 线段树分治、带权并查集
传送门 如果边不会消失,那么显然可以带权并查集做(然后发现自己不会写带权并查集) 但是每条边有消失时间.这样每一条边产生贡献的时间对应一段区间,故对时间轴建立线段树,将每一条边扔到线段树对应的点上. ...
- bzoj4025-二分图【线段树分治,并查集】
正题 题目链接:https://darkbzoj.tk/problem/4025 题目大意 \(n\)个点\(m\)条边,每条边会在一个\(T\)以内的时间段内出现,对于任意一个\(T\)以内的时刻求 ...
随机推荐
- mac系统访问windows共享文件夹
1. 打开finder 2. 找到前往 - 连接服务器 3. 打开后,输入smb://ip地址 点击连接 4. 选择共享文件夹 5. 点击好,之后就可以了,如下图
- 看书记笔记 书名21天学C#
☆:为重点★:为科普△:注▲:术语 前言概述 ☆一门语言必须包括诸如异常处理,无用单元收集,可扩展数据类型以及代码安全性等特征☆C#特性:简单性,面向对象,模块性,灵活性,简明性 ☆C#面向对象的封装 ...
- webshell导致项目崩溃
mysql挂死,无法启动,解决mysql无法启动: /etc/my.cnf配置文件中innodb_force_recovery=1然后service mysqld start/etc/my.cnf配置 ...
- 不同组的id列表的汇总对比
需求: 三个不同的dfs中存在不同的多个节点id,现在需要求出不同的dfs之间的节点对应关系,比如,哪些节点在某一个dfs,但是不在另一个dfs中 思路: 一. 如果是单纯计算dfs中节点数量,则可以 ...
- rviz初接触2.0
用rviz之前需要安装arbotix 在catkin_ws/src中 git clone https://github.com/vanadiumlabs/arbotix_ros.git 回到catki ...
- C#利用首尾時間計算中間時間差
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- c# 纯代码调用 webservice
public static class RequestHelper { public class RequestResult { public RequestResult(bool requestRe ...
- SQL Server Service Broker 示例(转)
1.定义数据类型.协议和服务(发送服务和接收服务) USE master; GO ALTER DATABASE 目标数据库 SET ENABLE_BROKER; GO -- 如果上面的操作执行后,长时 ...
- 百度ip定位城市接口调用
http://lbsyun.baidu.com/index.php?title=webapi/ip-api require 'rubygems' require 'json' print ARGV p ...
- 西门子S7-300 PLC视频教程(百度网盘)
西门子S7-300 PLC视频教程(百度网盘) 百度网盘链接地址: 链接:https://pan.baidu.com/s/1MqC0DJbv-ndCzk9XGU2AYQ 提取码:u5eq 祝大家天天开 ...