jzoj6276-[Noip提高组模拟1]树【线段树,扫描线,倍增】

正题


题目大意

一棵树,若干个点对,求不包括任何一个点对的路径数量。


解题思路

我们考虑将不合法的方案在坐标系上表示。

我们先只考虑一个点对(x,y)(x,y)(x,y),若xxxyyy没有祖先关系,则不合法的路径一个点在xxx的子树中,一个在yyy的子树中
在这里插入图片描述
一个在绿色中选,一个在蓝色中选,也就是sizx∗sizysiz_x*siz_ysizxsizy个不合法方案

uuuvvv祖先则
在这里插入图片描述
反之亦然

这时我们可以用倍增求出在yyyxxx的路径中xxx的前一个点(也就是那个空白的圆)

那么一对点的情况就求好了,然后不是一对点时会有重复的。

我们先求一遍dfsdfsdfs序,然后用矩形(x1,y1,x2,y1)(x1,y1,x2,y1)(x1,y1,x2,y1)表是起点的dfsdfsdfs序在x1∼x2x1\sim x2x1x2这段范围,终点的dfsdfsdfs序在y1∼y2y1\sim y2y1y2这段范围是不可以选择的。

对于以上的第一种情况直接是一个矩形,然后第二种情况我们可以转换为两个矩形。

不过要注意的是要求x1≤x2x1\leq x2x1x2y1≤y2y1\leq y2y1y2不然会有重复。


codecodecode

#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=100100; 
int n,m,p[N][2],dfn[N],rfn[N],cnt;
int tot,ls[N],v[N],ed[N],num;
int f[N][30],dep[N],T;
long long ans;
vector<int> d[N];
struct treenode{int l,r,mark,val;
}t[N*8];
struct line_node{int x,Y1,y2,w;
}line[N*4];
void build(int k,int l,int r)
{t[k].l=l;t[k].r=r;if(l==r) return;int mid=(l+r)>>1;build(k*2,l,mid);build(k*2+1,mid+1,r);
}
void change(int k,int l,int r,int num)
{if(t[k].l==l&&t[k].r==r){t[k].mark+=num;if(t[k].mark)t[k].val=t[k].r+1-t[k].l;else if(l==r) t[k].val=0;else t[k].val=t[k*2].val+t[k*2+1].val;return;}int mid=(t[k].l+t[k].r)>>1;if(r<=mid) change(k*2,l,r,num);else if(l>mid) change(k*2+1,l,r,num);else change(k*2,l,mid,num),change(k*2+1,mid+1,r,num);if(t[k].mark)t[k].val=t[k].r+1-t[k].l;else t[k].val=t[k*2].val+t[k*2+1].val;
}
struct Edge_node{int to,next;
}a[N*2];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs(int x,int fa)
{dfn[++cnt]=x;rfn[x]=cnt;f[x][0]=fa;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa) continue;dep[y]=dep[x]+1;dfs(y,x);}ed[x]=cnt;
}
int LCA(int x,int y)
{for(int i=T;i>=0;i--)if(dep[f[y][i]]>dep[x]) y=f[y][i];return y;
}
void addc(int x1,int x2,int Y1,int y2)
{if(x1>x2) swap(x1,x2);if(Y1>Y1) swap(Y1,y2);line[++num]=(line_node){x1,Y1,y2,1};line[++num]=(line_node){x2+1,Y1,y2,-1};
}
bool cmp(line_node x,line_node y)
{return x.x<y.x;}
int main()
{freopen("tree.in","r",stdin);//freopen("tree.out","w",stdout);scanf("%d%d",&n,&m);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}dfs(1,0);T=(int)(log(n)/log(2))+1;for (int j=1;j<=T;j++)for (int i=1;i<=n;i++)f[i][j]=f[f[i][j-1]][j-1];for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);if(rfn[x]>rfn[y]) swap(x,y);if(rfn[y]<=ed[x]&&rfn[y]>rfn[x]){int son=LCA(x,y);if(rfn[son]!=1) addc(1,rfn[son]-1,rfn[y],ed[y]);if(ed[son]!=n) addc(rfn[y],ed[y],ed[son]+1,n);}else addc(rfn[x],ed[x],rfn[y],ed[y]);}sort(line+1,line+1+num,cmp);build(1,1,n);int l=1;for(int i=1;i<=n;i++){while(l<=num&&line[l].x<=i){change(1,line[l].Y1,line[l].y2,line[l].w);l++;}ans+=t[1].val;}printf("%lld",(long long)n*(n-1)/2-ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud Greenwich(三)注册中心之zookeeper、Zuul和 gateway网关配置

本项目是搭建基于zookeeper注册中心的springcloud&#xff0c;使用zuul网关和gateway网关 一、框架搭建 &#xff08;1&#xff09;项目结构 micro-service 服务提供者 zuul-gateway zuul网关 springcloud-gateway gateway网关 &#xff08;2&#xff09;环境 zookeeper…

Metrics, tracing 和 logging 的关系

译者注Peter Bourgon原作&#xff1a; Metrics, tracing, and logging译者&#xff1a;吴晟原作发表时间&#xff1a; 2017年2月21日这是在OpenTracing和分布式追踪领域内广受欢迎的一篇博客文章。在构建监控系统时&#xff0c;大家往往在这几个名词和方式之间纠结。 通过这篇文…

快速序列化组件MessagePack介绍

简介MessagePack for C&#xff03;&#xff08;MessagePack-CSharp&#xff09;是用于C&#xff03;的极速MessagePack序列化程序&#xff0c;比MsgPack-Cli快10倍&#xff0c;与其他所有C&#xff03;序列化程序相比&#xff0c;具有最好的性能。 MessagePack for C&#xff…

SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置

本项目是搭建基于eureka注册中心的springcloud&#xff0c;使用zuul网关和gateway网关 一、框架搭建 &#xff08;1&#xff09;项目结构 eureka-server eureka注册中心 micro-service 服务提供者 zuul-gateway zuul网关 springcloud-gateway gateway网关 &#xff08;…

【ASP.NET Core】给路由规则命名有何用处

上一篇中老周给伙伴们介绍了自定义视图搜索路径的方法&#xff0c;本篇咱们扯一下有关 URL 路径规则的名称问题。在扯今天的话题之前&#xff0c;先补充点东东。在上一篇中设置视图搜索路径时用到三个有序参数&#xff1a;{2}{1}{0}&#xff0c;分别是 Area、Controller、Actio…

SpringCloud Greenwich(五)之nacos、dubbo、Zuul和 gateway集成

本项目是搭建基于nacos注册中心的springcloud&#xff0c;集成dubbo框架&#xff0c;使用zuul网关和gateway网关 一、框架搭建 &#xff08;1&#xff09;项目结构 micro-service 服务提供者 zuul-gateway zuul网关 springcloud-gateway gateway网关 class-provider dubo…

.NET/.NET Core中更清晰的堆栈跟踪

在基于异常的语言中&#xff0c;堆栈跟踪是用于诊断问题最重要的工具之一。在某些情况下&#xff0c;开发人员能得到的仅为一条简短的错误信息以及堆栈跟踪&#xff0c;尤其是当个人可识别信息&#xff08;PII&#xff09;约束限制了日志记录的内容时。随着任务并行库&#xff…

SpringCloud Greenwich(六)集成dubbo与openfeign的feignTargeter报错,cannot access its superinterface Targeter

一、现象 org.springframework.beans.factory.BeanCreationException: Error creating bean with name feignTargeter defined in class path resource [org/springframework/cloud/openfeign/FeignAutoConfiguration$HystrixFeignTargeterConfiguration.class]: Initializati…

一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go

在做RabbitCloud&#xff08;之前是一个RPC&#xff0c;现在是一个微服务框架&#xff09;的时候往往避不开客户端代理&#xff0c;之前把这些客户端代理都算作服务框架不可缺少的一部分&#xff0c;随着后期的深入发现这些客户端代理其实可以互通&#xff0c;类似spring cloud…

SpringCloud Greenwich(七)集成dubbo先启动消费者(check=false),然后启动提供者无法自动发现注册

SpringCloud Greenwich集成dubbo先启动消费者&#xff08;checkfalse&#xff09;&#xff0c;然后启动提供者无法自动发现注册问题。 官方说明&#xff1a;修复bug的提交时间 spring-cloud-starter-dubbo 2.2.4.RELEASE之前的版本都会有先启动消费者&#xff08;checkfalse&am…

.NET Core 实现定时抓取博客园首页文章信息并发送到邮箱

前言大家好&#xff0c;我是晓晨。许久没有更新博客了&#xff0c;今天给大家带来一篇干货型文章&#xff0c;一个每隔5分钟抓取博客园首页文章信息并在第二天的上午9点发送到你的邮箱的小工具。比如我在2018年2月14日&#xff0c;9点来到公司我就会收到一封邮件&#xff0c;是…

Linux shell echo打印不出换行

一、现象 echo打印不出换行 指令 ps aux | grep python ps aux | grep python | xargs echo 运行结果&#xff1a; 二、使用参数-e echo一样打印不出换行 ps aux | grep python | xargs echo -e 运行结果&#xff1a; 三、使用参数-e和双引号包裹占位符 echo终于可以…

基于Citus和ASP.NET Core开发多租户应用

Citus是基于PsotgreSQL的扩展&#xff0c;用于切分PsotgreSQL的数据&#xff0c;非常简单地实现数据“切片&#xff08;sharp&#xff09;”。如果不使用Citus&#xff0c;则需要开发者自己实现分布式数据访问层&#xff08;DDAL&#xff09;&#xff0c;实现路由和结果汇总等逻…

ASP.NET CORE 微服务(简化版)实战系列-没有比这性价比再高的实战课程了

ASP.NET CORE 微服务(简化版&#xff09;实战系列&#xff0c;最后1天298&#xff0c;现在注册购买再减50。作者jesse 腾飞在2.14 早上我买了他的课程后&#xff0c;他才做了下面这个活动&#xff1a;作者jesse 腾飞花了大量的时间做了一个非常好的视频教程&#xff0c;我个人也…

祝大家狗年家庭事业旺旺旺

冒泡排序&#xff0c;选择排序&#xff0c;插入排序&#xff0c;快速排序&#xff0c;堆排序&#xff0c;归并排序&#xff0c;希尔排序&#xff0c;桶排序&#xff0c;基数排序新年帮您排忧解难。有向图&#xff0c;无向图&#xff0c;有环图&#xff0c;无环图&#xff0c;完…

携程Apollo(阿波罗)配置中心在.NET Core项目快速集成

.NET Core的支持文档大体上可以参考文档.Net客户端使用指南&#xff1a;https://github.com/ctripcorp/apollo/wiki/.Net%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97登录Apollo上新建App和相关的配置项&#xff0c;可以参考如下配置&#xff1a;在Nuget上…

欢乐纪中A组赛【2019.8.9】

前言 在短暂的比赛时间中&#xff0c;我发现本菜鸡越是功于心计想ACACAC&#xff0c;越是拿不到分&#xff0c;所以。。。 我不写比赛了JOJO!JOJO!JOJO! 成绩 JJJ表示初中&#xff0c;HHH表示高中后面加的是几年级 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC17…

SpringCloud Zuul(四)之工作原理

一、筛选器概述 Zuul的中心是一系列过滤器&#xff0c;这些过滤器能够在HTTP请求和响应的路由期间执行一系列操作。 以下是Zuul过滤器的主要特征&#xff1a; 类型&#xff1a;通常定义路由流程中应用过滤器的阶段&#xff08;尽管它可以是任何自定义字符串&#xff09;执行…

使用Nito.AsyncEx实现异步锁

Lock是常用的同步锁&#xff0c;但是我们无法在Lock的内部实现异步调用&#xff0c;比如我们无法使用await.以下面的代码为例&#xff0c;当你在lock内部使用await时&#xff0c;VS会报错提醒。最简单的解决办法就是使用第三方的库Nito.AsyncEx。可以通过Nuget安装。通过AsyncL…

汽车之家店铺数据抓取 DotnetSpider实战[一]

一、背景春节也不能闲着&#xff0c;一直想学一下爬虫怎么玩&#xff0c;网上搜了一大堆&#xff0c;大多都是Python的&#xff0c;大家也比较活跃&#xff0c;文章也比较多&#xff0c;找了一圈&#xff0c;发现园子里面有个大神开发了一个DotNetSpider的开源库&#xff0c;很…