2019 Nowcoder Multi-University Training Contest 4 E Explorer
线段树分治。
把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的更多相关文章
- 2019 Multi-University Training Contest 8
2019 Multi-University Training Contest 8 C. Acesrc and Good Numbers 题意 \(f(d,n)\) 表示 1 到 n 中,d 出现的次数 ...
- 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 ...
- 2019 Multi-University Training Contest 1
2019 Multi-University Training Contest 1 A. Blank upsolved by F0_0H 题意 给序列染色,使得 \([l_i,r_i]\) 区间内恰出现 ...
- 2019 Multi-University Training Contest 2
2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...
- 2019 Multi-University Training Contest 5
2019 Multi-University Training Contest 5 A. fraction upsolved 题意 输入 \(x,p\),输出最小的 \(b\) 使得 \(bx\%p&l ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- aicoder实习svn内部培训教程
1 svn介绍 都已经用了git,为什么还要介绍svn呢?为了让aicoder.com的学员能够掌握多种的源代码管理工具的使用方法,更快的融入到项目开发中,特整理此文档. 1.1 项目管理中的版本控制 ...
- ECMAScript 初探 - 基础篇
ECMAScript 语言的标准是由 Netscape.Sun.微软.Borland 等公司基于 JavaScript 和 JScript 锤炼.定义出来的. ECMAScript 仅仅是一个描述,定 ...
- linux安装go环境并编写第一个go程序
1.从官网下载go源码包 wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz 2.在/usr/local下解压源码包 sudo tar ...
- visual studio -- 调试时自动传递给exe入参
如果你写的main函数接受入参int main(int argc, char* argv[]),则可以 右键工程--属性--调试,在命令行参数中输入入参即可,这些字符串会被直接传递给exe.
- ImageView的adjustViewBounds属性
adjustViewBounds属性的定义如下: 调整ImageView的边界,使得ImageView和图片有一样的宽高比 这个属性只有在ImageView一边如宽度或高度固定,一边为wrap_con ...
- 【题解】NOIP2015提高组 复赛
[题解]NOIP2015提高组 复赛 传送门: 神奇的幻方 \([P2615]\) 信息传递 \([P2661]\) 斗地主 \([P2668]\) 跳石头 \([P2678]\) 子串 \([P26 ...
- 使用VMware 15 安装虚拟机和使用CentOS 8
前言: 最近在学习Linux和.Net Core,学习一些跨平台的知识.首先我用的虚拟机软件是VMware-15.1.0,Linux系统是CentOS-8-x86_64-1905-dvd1. 一.安装 ...
- swagger 集成后发布到服务器报错[Could not find file 'D:\\home\\site\\wwwroot\\bin\\WebAPI.XML]
webapi集成swagger后,在本地运行没有问题,但是发布到服务器上就有问题. 报错信息:Could not find file 'D:\\home\\site\\wwwroot\\bin\\We ...
- Exif认识
找到一个js获取Exif的信息.php的也很简单.打开扩展就可以直接读了.也支持url的 这个是js的 http://code.ciaoca.com/javascript/exif-js/ EXIF ...
- XSS相关Payload及Bypass的备忘录(上)
翻译学习准备自用,同时分享给大家, 来自于: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20Injecti ...