链接:https://ac.nowcoder.com/acm/contest/888/E
来源:牛客网

Gromah and LZR have entered the fifth level. Unlike the first four levels, they should do some moves in this level.
There are nn_{}n​ vertices and mm_{}m​ bidirectional roads in this level, each road is in format (u,v,l,r)(u, v, l, r)_{}(u,v,l,r)​, which means that vertex uu_{}u​ and vv_{}v​ are connected by this road, but the sizes of passers should be in interval [l,r][l, r]_{}[l,r]​. Since passers with small size are likely to be attacked by other animals and passers with large size may be blocked by some narrow roads.
Moreover, vertex 11_{}1​ is the starting point and vertex nn_{}n​ is the destination. Gromah and LZR should go from vertex 11_{}1​ to vertex nn_{}n​ to enter the next level.
At the beginning of their exploration, they may drink a magic potion to set their sizes to a fixed positive integer. They want to know the number of positive integer sizes that make it possible for them to go from 11_{}1​ to nn_{}n​.

Please help them to find the number of valid sizes.

输入描述:

The first line contains two positive integers n,mn,m_{}n,m​, denoting the number of vertices and roads.
 
Following m lines each contains four positive integers u,v,l,ru, v, l, r_{}u,v,l,r​, denoting a bidirectional road (u,v,l,r)(u, v, l, r)_{}(u,v,l,r)​.
 
 
1≤n,m≤105,1≤u<v≤n,1≤l≤r≤1091 \le n,m \le 10^5, 1 \le u < v \le n, 1 \le l \le r \le 10^91≤n,m≤105,1≤u<v≤n,1≤l≤r≤109

输出描述:

Print a non-negative integer in a single line, denoting the number of valid sizes.
示例1

输入

5 5
1 2 1 4
2 3 1 2
3 5 2 4
2 4 1 3
4 5 3 4

输出

2

题意:
给定m条边,每条边有一个通过的阈值,问可以从1到n的值有多少个.
思路:
把这些边放入一个点表示区间的线段树里面.
这真是我从未见过的全新套路,在线段树上dfs,相当于枚举权值,由于每一个点代表区间,所以每次就枚举到了一个区间. 枚举之时用并查集判断.
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime> #define fuck(x) cerr<<#x<<" = "<<x<<endl;
#define debug(a, x) cerr<<#a<<"["<<x<<"] = "<<a[x]<<endl;
#define lson l,mid,ls
#define rson mid+1,r,rs
#define ls (rt<<1)
#define rs ((rt<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int loveisblue = ;
const int maxn = ;
const int maxm = ;
const int inf = 0x3f3f3f3f;
const ll Inf = ;
const int mod = ;
const double eps = 1e-;
const double pi = acos(-);
int n,m;
struct edge{
int u,v,l,r;
}e[maxn];
int f[maxn],rk[maxn];
int rem[maxn],tot; vector<int>eg[maxn<<]; void update(int l,int r,int rt,int L,int R,int id){
if(rt==){ return;}
if(L<=l&&R>=r){
eg[rt].push_back(id);
return;
}
int mid = (l+r)>>;
if(L<=mid)update(l,mid,rt*,L,R,id);
if(R>mid)update(mid+,r,rt*+,L,R,id);
} int getf(int x){
if(x==f[x]){ return x;}
return getf(f[x]);
} int ans = ;
struct node{
int num,type;
}; void dfs(int l,int r,int rt){ stack<node>tmp;
for(auto it:eg[rt]){
int t1 = getf(e[it].u);
int t2 = getf(e[it].v);
if(rk[t1]<rk[t2]){
tmp.push(node{f[t1],});
f[t1]=f[t2];
}else if(rk[t1]>rk[t2]){
tmp.push(node{f[t2],});
f[t2]=f[t1];
}else{
tmp.push(node{f[t2],});
f[t2]=f[t1];
rk[t2]++;
}
} if(l==r){
if(getf()==getf(n)&&l!=tot){
ans+=rem[r+]-rem[l];
}
while (!tmp.empty()){
node it = tmp.top();
tmp.pop();
f[it.num]=it.num;
if(it.type==){
rk[it.num]--;
}
}
return;
}
int mid = (l+r)>>;
dfs(lson);
dfs(rson);
while (!tmp.empty()){
node it = tmp.top();
tmp.pop();
f[it.num]=it.num;
if(it.type==){
rk[it.num]--;
}
}
} int get_id(int x){
return lower_bound(rem+,rem++tot,x)-rem;
} int main() { scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
f[i]=i;
rk[i]=;
} for(int i=;i<=m;i++){
scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].l,&e[i].r);
rem[++tot] = e[i].l;
rem[++tot] = e[i].r+;
}
sort(rem+,rem++tot);
tot = unique(rem+,rem++tot)-rem-; for(int i=;i<=m;i++){
cout<<get_id(e[i].l)<<" "<<get_id(e[i].r+)-<<endl;
update(,tot,,get_id(e[i].l),get_id(e[i].r+)-,i);
}
dfs(,tot,);
printf("%d\n",ans);
return ;
}

2019牛客暑期多校训练营(第八场)E.Explorer的更多相关文章

  1. 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)

    题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才 ...

  2. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  3. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

  4. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  5. 2019牛客暑期多校训练营(第二场)F.Partition problem

    链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...

  6. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  7. [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem

    链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  8. 2019牛客暑期多校训练营(第二场)J-Subarray(思维)

    >传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...

  9. 2019牛客暑期多校训练营(第一场)-A (单调栈)

    题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...

  10. 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)

    题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...

随机推荐

  1. 1.27eia原油

  2. H5视频播放自动全屏,暂停退出全屏等功能

    html5视频播放自动全屏,暂停退出全屏等功能 在参考了html5 video fullScreen全屏实现方式及司徒正美的书<javascript框架设计>287页相关代码后,在Safa ...

  3. 【调试】Visual Studio 调试小技巧(2)-从查看窗口得到更多信息(转载)

    在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量.有时在查看窗口显示的内容不是很直观.为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧.下面 ...

  4. 【Django入坑之路】admin组件

    1:settings.py 中的 INSTALLED_APPS # Application definition INSTALLED_APPS = [ 'django.contrib.admin', ...

  5. DirectX11 With Windows SDK--11 混合状态

    原文:DirectX11 With Windows SDK--11 混合状态 前言 这一章会着重讲述混合状态,在下一章则会讲述深度/模板状态 DirectX11 With Windows SDK完整目 ...

  6. POI解决内存溢出问题

    在POI3.8中SXSSF仅仅支持excel2007格式是对XSSF的一种流的扩展.目的在生成excel时候,需要生成大量的数据的时候,通过刷新的方式将excel内存信息刷新到硬盘的方式,提供写入数据 ...

  7. iOS 内存管理arc

    http://www.tekuba.net/program/346/ ios自动释放池(autoreleasepool #import <Foundation/Foundation.h> ...

  8. docker下载容器镜像

    下载镜像的命令非常简单,使用docker pull命令即可. 在docker的镜像索引网站上面,镜像都是按照用户名/镜像名的方式来存储的. 有一组比较特殊的镜像,比如ubuntu这类基础镜像,经过官方 ...

  9. css字体大小单位

    1:px: 这个应该是国内使用较多的单位,意思为像素.因此,其视觉的呈现效果是与分辨率相关的.例如在1024*768分辨率下看12px的字体就比960*640下看到的“小”,其实字体像素未改变,所以觉 ...

  10. 《DL/T 976-2017 带电作业用工具、装置和设备预防性试验规程》中的样品名称及试验项目