线段树分治。

把size看成时间,相当于时间 $l$ 加入这条边,时间 $r+1$ 删除这条边。

注意把左右端点的关系。

#include <bits/stdc++.h>

const int N = 2e5 + ;
int X[N], Y[N], top; struct DSU {
int fa[N], sz[N];
int find(int x) {
while (x != fa[x]) x = fa[x];
return x;
}
void merge(int x, int y) {
x = find(x), y = find(y);
if (x == y) return;
if (sz[x] > sz[y]) std::swap(x, y);
sz[y] += sz[x]; fa[x] = y;
X[++top] = x;
Y[top] = y;
}
void undo(int last) {
for (; top > last; top--) {
sz[Y[top]] -= sz[X[top]];
fa[X[top]] = X[top];
}
}
void clear(int n) {
for (int i = ; i <= n; i++)
fa[i] = i, sz[i] = ;
}
} dsu; int a[N], cnt, n, m, ans; struct Node {
int u, v, x, y;
}; void solve(int l, int r, const std::vector<Node> &vec) {
if (vec.empty()) return;
int temp = top, mid = l + r >> ;
std::vector<Node> L, R;
for (auto p: vec) {
if (p.x <= l && p.y >= r) {
dsu.merge(p.u, p.v);
} else {
if (p.x <= mid) L.push_back(p);
if (p.y > mid) R.push_back(p);
}
}
if (dsu.find() == dsu.find(n)) {
/*if (l == 4) {
for (int i = 1; i <= top; i++)
printf("%d %d\n", X[i], Y[i]);
}*/
ans += a[r] - a[l - ];
dsu.undo(temp);
return;
}
if (l == r) {
dsu.undo(temp);
return;
}
solve(l, mid, L);
solve(mid + , r, R);
dsu.undo(temp);
} int main() {
freopen("in.txt", "r", stdin);
std::vector<Node> vec;
scanf("%d%d", &n, &m);
vec.resize(m);
for (int i = ; i < m; i++) {
scanf("%d%d%d%d", &vec[i].u, &vec[i].v, &vec[i].x, &vec[i].y);
a[cnt++] = vec[i].x - , a[cnt++] = vec[i].y;
}
a[cnt++] = ;
std::sort(a, a + cnt);
cnt = std::unique(a, a + cnt) - a;
for (int i = ; i < m; i++) {
vec[i].x = std::lower_bound(a, a + cnt, vec[i].x) - a;
vec[i].y = std::lower_bound(a, a + cnt, vec[i].y) - a;
}
dsu.clear(n);
solve(, cnt - , vec);
printf("%d\n", ans);
return ;
}

2019 Nowcoder Multi-University Training Contest 4 E Explorer的更多相关文章

  1. 2019 Multi-University Training Contest 8

    2019 Multi-University Training Contest 8 C. Acesrc and Good Numbers 题意 \(f(d,n)\) 表示 1 到 n 中,d 出现的次数 ...

  2. 2019 Multi-University Training Contest 7

    2019 Multi-University Training Contest 7 A. A + B = C 题意 给出 \(a,b,c\) 解方程 \(a10^x+b10^y=c10^z\). tri ...

  3. 2019 Multi-University Training Contest 1

    2019 Multi-University Training Contest 1 A. Blank upsolved by F0_0H 题意 给序列染色,使得 \([l_i,r_i]\) 区间内恰出现 ...

  4. 2019 Multi-University Training Contest 2

    2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...

  5. 2019 Multi-University Training Contest 5

    2019 Multi-University Training Contest 5 A. fraction upsolved 题意 输入 \(x,p\),输出最小的 \(b\) 使得 \(bx\%p&l ...

  6. HDU校赛 | 2019 Multi-University Training Contest 6

    2019 Multi-University Training Contest 6 http://acm.hdu.edu.cn/contests/contest_show.php?cid=853 100 ...

  7. HDU校赛 | 2019 Multi-University Training Contest 5

    2019 Multi-University Training Contest 5 http://acm.hdu.edu.cn/contests/contest_show.php?cid=852 100 ...

  8. HDU校赛 | 2019 Multi-University Training Contest 4

    2019 Multi-University Training Contest 4 http://acm.hdu.edu.cn/contests/contest_show.php?cid=851 100 ...

  9. HDU校赛 | 2019 Multi-University Training Contest 3

    2019 Multi-University Training Contest 3 http://acm.hdu.edu.cn/contests/contest_show.php?cid=850 100 ...

随机推荐

  1. 企业级Nginx负载均衡与keepalived高可用实战(二)keepalived篇

    1.Keepalived高可用软件 1.1.Keepalived介绍 Keepalived软件起初是专门为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  2. Redis快速入门及使用

    概述 redis是一种支持分布式的nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string, ...

  3. 一次线上Redis类转换异常排查引发的思考

    之前同事反馈说线上遇到Redis反序列化异常问题,异常如下: XxxClass1 cannot be cast to XxxClass2 已知信息如下: 该异常不是必现的,偶尔才会出现: 出现该异常后 ...

  4. 第20课 unique_ptr独占型智能指针

    一. unique_ptr的基本用法 (一)初始化方式 1. 直接初始化:unique<T> myPtr(new T);  //ok.但不能通过隐式转换来构造,如unique<T&g ...

  5. python运维开发常用模块(四)文件对比模块difflib

    1.difflib介绍 difflib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持 输出可读性比较强的HTML文档,与Linux下的diff命令相似.我们可以 使用dif ...

  6. idea类存在找不到解决办法

    清除idea缓存,

  7. C# Thread was being aborted

    先重现问题 1.新建一个aspx页面项目,插入两个页面WebForm1.aspx,WebForm2.aspx, WebForm1代码修改如下 protected void Page_Load(obje ...

  8. springmvc项目转为springboot

    说明 如果你的项目连maven项目都不是,请自行转为maven项目,在按照本教程进行. 本教程适用于spring+springmvc+mybatis+shiro的maven项目. 1.修改pom文件依 ...

  9. 【05】Saltstack:配置详解

    写在前面的话 上一节迷迷糊糊的说了一下配置管理,这一节主要谈谈我们常见的一些操作如何将他转换成配置文件的形式来实现.这样的好处在于,我们可以一次编写到处使用,不用每次再去编写复杂的命令. 配置回顾 在 ...

  10. 【docker】centos7 上拉取docker镜像,一直拉取不到,报错:Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while w

    镜像拉取一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request cancel ...