/*
思维难度几乎没有, 就是线段树分治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二分图(线段树分治 并查集)的更多相关文章

  1. [BZOJ4025]二分图(线段树分治,并查集)

    4025: 二分图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2191  Solved: 800[Submit][Status][Discuss] ...

  2. 2018.09.30 bzoj4025: 二分图(线段树分治+并查集)

    传送门 线段树分治好题. 这道题实际上有很多不同的做法: cdq分治. lct. - 而我学习了dzyo的线段树分治+并查集写法. 所谓线段树分治就是先把操作分成lognlognlogn个连续不相交的 ...

  3. BZOJ4025 二分图(线段树分治+并查集)

    之前学了一下线段树分治,这还是第一次写.思想其实挺好理解,即离线后把一个操作影响到的时间段拆成线段树上的区间,并标记永久化.之后一块处理,对于某个节点表示的时间段,影响到他的就是该节点一直到线段树根的 ...

  4. 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 ...

  5. Bzoj1018/洛谷P4246 [SHOI2008]堵塞的交通(线段树分治+并查集)

    题面 Bzoj 洛谷 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治. 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内 ...

  6. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

    传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...

  7. BZOJ3237 AHOI2013连通图(线段树分治+并查集)

    把查询看做是在一条时间轴上.那么每条边都有几段存在时间.于是线段树分治就好了. 然而在bzoj上t掉了,不知道是常数大了还是写挂了. 以及brk不知道是啥做数组名过不了编译. #include< ...

  8. BZOJ4025 二分图 线段树分治、带权并查集

    传送门 如果边不会消失,那么显然可以带权并查集做(然后发现自己不会写带权并查集) 但是每条边有消失时间.这样每一条边产生贡献的时间对应一段区间,故对时间轴建立线段树,将每一条边扔到线段树对应的点上. ...

  9. bzoj4025-二分图【线段树分治,并查集】

    正题 题目链接:https://darkbzoj.tk/problem/4025 题目大意 \(n\)个点\(m\)条边,每条边会在一个\(T\)以内的时间段内出现,对于任意一个\(T\)以内的时刻求 ...

随机推荐

  1. ValueError: attempted relative import beyond top-level package

    python 项目 在pycharm中, 在某个文件夹下: 右键--> mark directory as --> source root 如何在python脚本或者shell中 用代码实 ...

  2. selenium环境搭建-python自动化脚本测试

    站在朋友的肩膀上学习!!! 前提:python环境已经搭建完成 1.安装selenium 命令行输入“pip install selenium"一键式安装 2.检查Selenium是否安装成 ...

  3. Day1-浅谈接口测试

    1.接口测试的定义:从数据库里面取数据,插入数据,把前段和后端联系起来: 2.接口测试的必要性: 1)前端未开发好,但是接口已开发 2)页面上测不了的,可以通过接口来测试 3.接口测试需要注意: 1) ...

  4. vue环境配置

    wind系统下需要安装node.js 和git 1.安装npm 因为淘宝镜像较快,所以可以使用淘宝镜像安装npm npm install -g cnpm --registry=https://regi ...

  5. 认识Ajax

    1.简介 AJAX 相当于异步 JavaScript 和 XML,是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网 ...

  6. 寒假作业pta1

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * ********所谓“沙漏形状”,是指每行输出奇数个符号:各行符号中心对齐:相邻两行符 ...

  7. 【转】Session Cookie Token的区别

    Cookie cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保 ...

  8. CCNet: Criss-Cross Attention for Semantic Segmentation 里的Criss-Cross Attention计算方法

    论文地址:https://arxiv.org/pdf/1811.11721v1.pdf  code address: https://github.com/speedinghzl/CCNet 相关论文 ...

  9. Python Faker的使用(1):基础使用方法与函数速查,生成随机数据

    在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据. 在手动制造数据的过程中,可能需要花费大量精力和工作量,现在好了,有一 ...

  10. How to detect, enable and disable SMBv1, SMBv2, and SMBv3 in Windows and Windows Server

    转自:https://support.microsoft.com/en-us/help/2696547/detect-enable-disable-smbv1-smbv2-smbv3-in-windo ...