cf1278D——树的性质+并查集+线段树/DFS判环
昨天晚上本来想认真打一场的,,结果陪女朋友去了。。
回来之后看了看D,感觉有点思路,结果一直到现在才做出来
首先对所有线段按左端点排序,然后用并查集判所有边是否联通,即遍历每条边i,和前一条不覆盖它的边合并,和后一条不被它覆盖的边合并
再用线段树求边的总条数
ps.其实可以直接用并查集合并的思路,每个点往前往后连边,建图然后DFS判环/联通就可以了
#include<bits/stdc++.h>
#include<set>
using namespace std;
#define N 1000005 int n,dp[N];
pair<int,int>p[N];
set<int> s;
set<int>::iterator it; int F[N],pre[N],r[N];
int find(int x){
return F[x]==x?x:F[x]=find(F[x]);
} #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int lazy[N<<];
void pushdown(int rt){
if(lazy[rt]){
lazy[rt<<]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
lazy[rt]=;
}
}
void update(int L,int R,int v,int l,int r,int rt){
if(L<=l && R>=r){
lazy[rt]+=v;
return;
}
int m=l+r>>;
if(L<=m)update(L,R,v,lson);
if(R>m)update(L,R,v,rson);
}
int query(int pos,int l,int r,int rt){
if(l==r)return lazy[rt];
pushdown(rt);
int m=l+r>>;
if(pos<=m)return query(pos,lson);
else return query(pos,rson);
}
int main(){
cin>>n;
for(int i=;i<=n;i++)scanf("%d%d",&p[i].first,&p[i].second);
sort(p+,p++n);
for(int i=;i<=n;i++)r[p[i].second]=i; s.clear();
for(int i=;i<=n;i++)F[i]=i; int tot=; for(int i=;i<=n;i++){
it = s.lower_bound(p[i].second);
if(i== || it==s.begin()){//没有前驱
dp[p[i].second]=-;
s.insert(p[i].second);
}
else {//有前驱
it--;
dp[p[i].second]=*it;
int tmp=dp[*it];
if(p[i].first<=tmp){
puts("NO");
return ;
}
s.insert(p[i].second); int fu=find(i),fv=find(r[*it]);
if(fu!=fv && p[i].first<=*it)
F[fu]=fv;
}
if(i<n){//找后继
int L=i+,R=n,mid,ans=;
while(L<=R){
mid=L+R>>;
if(p[mid].second>p[i].second)
ans=mid,R=mid-;
else L=mid+;
}
if(ans){
int fu=find(i),fv=find(ans);
if(fu!=fv && p[i].second >= p[ans].first)
F[fu]=fv;
}
}
tot+=query(p[i].first,,,)-query(p[i].second,,,);
update(p[i].first,p[i].second,,,,);
} if(tot!=n-){puts("NO");return ;} int cnt=;
for(int i=;i<=n;i++)
if(find(i)==i)cnt++;
if(cnt==)puts("YES");
else puts("NO");
}
cf1278D——树的性质+并查集+线段树/DFS判环的更多相关文章
- UVA1455 - Kingdom(并查集 + 线段树)
UVA1455 - Kingdom(并查集 + 线段树) 题目链接 题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum ...
- 并查集&线段树&树状数组&排序二叉树
超级无敌巨牛逼并查集(带权并查集)https://vjudge.net/problem/UVALive-4487 带删点的加权并查集 https://vjudge.net/problem/UVA-11 ...
- 【Codeforces576E_CF576E】Painting Edges(可撤销并查集+线段树分治)
题目 CF576E 分析: 从前天早上肝到明天早上qwq其实颓了一上午MC ,自己瞎yy然后1A,写篇博客庆祝一下. 首先做这题之前推荐一道很相似的题:[BZOJ4025]二分图(可撤销并查集+线段树 ...
- BZOJ 3910 并查集+线段树合并
思路: 1. 并查集+线段树合并 记得f[LCA]==LCA的时候 f[LCA]=fa[LCA] 2.LCT(并不会写啊...) //By SiriusRen #include <cstdio& ...
- 【离线 撤销并查集 线段树分治】bzoj1018: [SHOI2008]堵塞的交通traffic
本题可化成更一般的问题:离线动态图询问连通性 当然可以利用它的特殊性质,采用在线线段树维护一些标记的方法 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常 ...
- 【BZOJ4025】二分图(可撤销并查集+线段树分治)
题目: BZOJ4025 分析: 定理:一个图是二分图的充要条件是不存在奇环. 先考虑一个弱化的问题:保证所有边出现的时间段不会交叉,只会包含或相离. 还是不会?再考虑一个更弱化的问题:边只会出现不会 ...
- 并查集 + 线段树 LA 4730 Kingdom
题目传送门 题意:训练指南P248 分析:第一个操作可以用并查集实现,保存某集合的最小高度和最大高度以及城市个数.运用线段树成端更新来统计一个区间高度的个数,此时高度需要离散化.这题两种数据结构一起使 ...
- YYHS-猜数字(并查集/线段树维护)
题目描述 LYK在玩猜数字游戏. 总共有n个互不相同的正整数,LYK每次猜一段区间的最小值.形如[li,ri]这段区间的数字的最小值一定等于xi. 我们总能构造出一种方案使得LY ...
- luogu5012 水の数列 (并查集+线段树)
如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x ...
随机推荐
- 《图解设计模式》读书笔记2-1 Template Method模式
目录 模板方法模式 类图 思想: 模板方法模式 在父类中定义流程,在子类中实现具体的方法. 类图 代码 //抽象类 public abstract class AbstractDisplay { pu ...
- delphi中的idhttpserver如何才能收到idhttp发送来的exe\rar文件呢
http://zhidao.baidu.com/link?url=-q2oXqYCKBZ9OgFDEHAcQwQEY_NroHcqGvVfKW67X5sF9LdjAAB_HPXQo04VxStFVS7 ...
- STM32 HAL库关于串口中断烧录程序后可以正常运行,断电重启后无法进入中断的问题分析以及解决方法
1.情景描述: 最近在做一个项目,X86的上位机通过串口控制MCU,使用串口中断接收上位机数据时,MCU在上电的情况下烧录程序,可以正常接收上位机的数据,在断电重启后,一直进入不了中断回调函数,上电的 ...
- 16/8/23-jQuery完全图解scrollLeft,scrollWidth,clientWidth,offsetWidth 获取相对途径,滚动图片
引用地址:http://www.cnblogs.com/mguo/archive/2013/03/19/2969657.html scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最 ...
- 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- Cross-entropy Cost Function for Classification Problem
在Machine Learning的Regression Problem中,常用Quadratic Function来做Cost Function,用以表征Hypothesis与Y之间的差距.而通过G ...
- servlet--response、request
请求响应流程图 response 1 response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServle ...
- react 渲染顺序
工作中要对一个表格做再次更新, 可能是渲染后更新或者部分组件渲染之后, 对页面效果做处理 之前对react的理解, 仅仅停留在render渲染. 这次好好理解了下react的生命周期 1 react组 ...
- BZOJ 1588 (treap)
题面 传送门 分析 语文题,主要是如何理解最小波动值 设当前天的营业额为x,则最小波动值为min(x-最大的<=x的数,最小的>=x的数-x) 然后用Treap维护序列就可以了 时间复杂度 ...
- [fw]linux 下如何查看和踢除正在登陆的其它用户
linux 下如何查看和踢除正在登陆的其它用户 Posted on 2011/09/01 如何在linux下查看当前登录的用户,并且踢掉你认为应该踢掉的用户?请使用who这个命令来查看当前正在登录 ...