链接: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. BasicAuth memo

    string authInfo = userName + ":" + userPassword; authInfo = Convert.ToBase64String(Encodin ...

  2. P4930「FJ2014集训」采药人的路径

    题目:P4930「FJ2014集训」采药人的路径 思路: 这篇不算题解,是让自己复习的,什么都没说清楚. 很久没有写点分治了,以前为了赶课件学的太急,板子都没打对就照着题解写题,导致学得很不扎实. 这 ...

  3. Flask学习之六 个人资料和头像

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vi-profile-page-and-avatars ...

  4. Javascript用正则表达式replace替换父串中所有符合条件的子串

    这样用,只会替换匹配到的第一个子串 str = 'I hava a pen ,I hava an apple,apple pen, pen apple' str = str.replace('appl ...

  5. D - Denouncing Mafia DFS

    这道题其实很简单,求k个到根的链,使得链上的节点的个数尽可能多,如果节点被计算过了,就不能再被计算了,其实我们发现,只要k>=叶子节点,那么肯定是全部,所以我们考虑所有的叶子节点,DFS到根节点 ...

  6. @bzoj - 4378@ [POI2015] Pustynia

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的正整数序列 a,每个数都在 1 到 10^ ...

  7. Laravel5.1 实现第三方登录认证教程之 - 微信登录

    https://laravel-china.org/topics/2451/laravel51-implementation-of-the-third-party-login-authenticati ...

  8. Mysql到Java数据类型映射的JDBC规范

  9. 第三期 行为规划——10.用C++实现变道函数

    在之前的测验中,我们设计了一个成本函数,高速公路上到达一个目标选择一条车道. 公式中,Δd是车道间的纵向距离,Δs是车辆到目标之间的距离. 在这个测验中,需要用c++实现代价函数,但是这里有一个变换, ...

  10. 获取checkbox返回值

    <div class="checkbox"> <label> <input type="checkbox" value=" ...