nssl1459-空间简单度【扫描线,线段树】

正题


题目大意

nnn个点的一颗树,合法路径定义为一条路径上每个点的编号相差大于KKK。求合法路径数


解题思路

首先我们可以求不合法的路径数,这样我们就有了K∗nK*nKn个不合法(即不能在同一个路径上)的点对。

然后这题就和之前一题jzoj6276一样了

大概就是用矩形表示不合法的路径,之后用扫面线求矩形的面积并即可。


codecodecode

#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
const int N=3e5+10;
struct node{int to,next;
}a[N*2];
struct line{int x,l,r,w;
}l[N*40];
bool operator<(line x,line y)
{return x.x<y.x;} 
int n,K,tot,cnt,num;
int rfn[N],ed[N],f[N][21],dep[N];
int w[N*4],mark[N*4],ls[N];
long long ans;
__attribute__((optimize("O3"))) inline int read() {int x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(int x,int fa){rfn[x]=++cnt;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa)continue;dep[y]=dep[x]+1;f[y][0]=x;dfs(y,x);}ed[x]=cnt;return;
}
int LCA(int x,int y){for(int i=20;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);l[++num]=(line){x1,y1,y2,1};l[++num]=(line){x2+1,y1,y2,-1};
}
void Ban(int x,int y){if(rfn[x]>rfn[y])swap(x,y);if(rfn[x]<=rfn[y]&&rfn[y]<=ed[x]){int top=LCA(x,y);if(rfn[top]!=1)addc(1,rfn[top]-1,rfn[y],ed[y]);if(ed[top]!=n)addc(rfn[y],ed[y],ed[top]+1,n);}else addc(rfn[x],ed[x],rfn[y],ed[y]);return;
}
void Change(int x,int L,int R,int l,int r,int val){if(L==l&&R==r){mark[x]+=val;if(mark[x])w[x]=r-l+1;else if(l==r)w[x]=0;else w[x]=w[x*2]+w[x*2+1];return;}int mid=(L+R)>>1;if(r<=mid)Change(x*2,L,mid,l,r,val);else if(l>mid)Change(x*2+1,mid+1,R,l,r,val);else Change(x*2,L,mid,l,mid,val),Change(x*2+1,mid+1,R,mid+1,r,val);if(mark[x])w[x]=R-L+1;else w[x]=w[x*2]+w[x*2+1];return;
}
int main()
{freopen("data.in","r",stdin);int size = 256 << 20; //250Mchar*p=(char*)malloc(size) + size;__asm__("movl %0, %%esp\n" :: "r"(p) );n=read();K=read(); for(int i=1;i<n;i++){int x=read(),y=read();addl(x,y);addl(y,x);}dfs(1,1);for(int i=1;i<=20;i++)for(int j=1;j<=n;j++)f[j][i]=f[f[j][i-1]][i-1];for(int i=1;i<=n;i++)for(int j=i+1;j<=min(i+K,n);j++)Ban(i,j);sort(l+1,l+1+num);int z=1;for(int i=1;i<=n;i++){while(z<=num&&l[z].x<=i)Change(1,1,n,l[z].l,l[z].r,l[z].w),z++;ans+=w[1];}printf("%lld",1ll*n*(n-1)/2-ans+n);
}

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

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

相关文章

ASP.NET Core Identity Hands On(2)——注册、登录、Claim

上一篇文章&#xff08;ASP.NET Core Identity Hands On&#xff08;1&#xff09;——Identity 初次体验&#xff09;中&#xff0c;我们初识了Identity&#xff0c;并且详细分析了AspNetUsers用户存储表&#xff0c;这篇我们将一起学习Identity 默认生成的样板代码的注册与登…

洛谷 动态规划一日游 P2577、P1070、P2051

记 2018年3月19日 贼颓呢&#xff0c;一天就写了两道DP&#xff0c;还都不会写&#xff0c;这可GG。 动态规划真的难且有趣&#xff0c;算法题中动态规划占到了很大的比例&#xff0c;而且动态规划往往是辅助解决一些其他类型问题的基础&#xff0c;加深加强对动态规划问题的…

【DP】【高精】幸运票 (jzoj 2122)

幸运票 题目大意&#xff1a; 一个长度为2N的序列&#xff0c;这些数的总和为S&#xff0c;当这个序列的前N个和后N个总和相等时&#xff0c;它是符合题意的&#xff0c;问有符合题意的有多少种可能 样例输入 2 2 样例输出 4 数据范围限制 1<N<50 S<1000 解…

51nod-有限背包计数问题【dp】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1597 题目大意 nnn种物品&#xff0c;第iii个大小为iii且有iii个。 求恰好填满大小为nnn的背包的方案数 解题思路 我们可以将背包分为两份&#xff0c;对于大小小于等于n\sqrt nn​的物品&#xff0c;这…

Build 2018大会:.NET概述和路线图

在Microsoft Build 2018大会上&#xff0c;.NET项目管理主管Scott Hunter和.NET社区主管Scott Hanselman举行了一场有关.NET未来发展的会谈。会谈指出&#xff0c;未来.NET平台将可以搭建任何类型的应用程序&#xff1a;桌面程序、web程序、云程序、移动应用、游戏应用、物联网…

洛谷P2278操作系统 模拟+堆

一道模拟题 竟然活生生的不会模拟&#xff0c;感觉自己好菜啊。 在模拟的时候&#xff0c;一定要弄清楚要对什么进行模拟。 题解 进程的等待队列是一个优先队列&#xff0c;优先队列是以优先级降序作为第一关键字&#xff0c;以进入时间为第二关键字。在操作系统这道题目中…

【二分】抄书 (jzoj 2123)

抄书 题目大意&#xff1a; 有n本书&#xff0c;分给m个人抄&#xff0c;每个人只能拿到连续的书&#xff08;不能把一本书分开&#xff09;&#xff0c;问抄书最多的人要抄多少页 样例输入 9 3 100 200 300 400 500 600 700 800 900 样例输出 1700 数据范围限制 对于…

nssl1467-U【差分】

正题 题目大意 n∗nn*nn∗n的矩阵&#xff0c;每次让一个下三角形内数字加上一定权值。求最后所有位置的异或和 解题思路 我们发现如果我们对于没行做前缀和的话&#xff0c;我们需要修改的位置就是一个竖直下去的一列和斜着的一条&#xff0c;所以我们可以分别对于竖着的和斜…

汽车之家汽车品牌Logo信息抓取 DotnetSpider实战[三]

一、正题前的唠叨第一篇实战博客&#xff0c;阅读量1000&#xff0c;第二篇&#xff0c;阅读量200&#xff0c;两篇文章相差近5倍&#xff0c;这个差异真的令我很费劲&#xff0c;截止今天&#xff0c;我一直在思考为什么会有这么大的差距&#xff0c;是因为干货变少了&#xf…

洛谷P1801 黑匣子 双堆套路的使用

题意 题目链接 题解 这道题本可以用Treap暴力求解出来&#xff0c;但是不够优雅&#xff0c;因为没有充分利用到题目中给的条件&#xff0c;那就是要求的ithith小的值的ii是单调递增的。我们用两个堆来维护,大顶堆和小顶堆。 大顶堆中的元素是排好序的前i&#x2212;1&qu…

2019.01.26【NOIP普及组】模拟赛C组总结

总结 这次比赛的得分是&#xff1a;10001060170 第一题想了一会&#xff0c;想到了方法&#xff0c;直接打出来&#xff0c;第二题不会&#xff0c;想水分&#xff0c;但没水到&#xff0c;第三题打了一个假的DP&#xff0c;10分&#xff0c;第四题用DP超时了&#xff0c;60分…

nssl1468-V【状压,数学期望,dfs】

正题 题目大意 nnn个球排成一排颜色不同&#xff0c;每次选择一个随机的[1..n][1..n][1..n]中的xxx&#xff0c;然后删掉第xxx个或第n−x1n-x1n−x1个数&#xff0c;求删kkk次之后删掉的白球最多&#xff0c;求删掉数量的期望值 解题思路 考虑状态压缩dpdpdp&#xff0c;定义第…

洛谷 一种堆套路 P1631序列合并、P2085最小函数值

题目链接 序列合并 最小函数值 题解 这两道题做法基本一样&#xff0c;是使用同一种套路解决的&#xff0c;这里用序列合并来举例说明。 序列合并要求出N2N2个和中最小的N个数。 我们用一个堆来维护我们需要的数&#xff0c;并且保证当前最小值一定在堆中。 把a和b排个序…

.NET Core 2.1 正式发布

这次更新包括对性能的改进&#xff0c;对运行时和工具的改进。还包含一种以 NuGet 包的形式部署工具的新方法。我们添加了一个名为 Span<T> 的新基元类型&#xff0c;它可以在没有内存分配的情况下对数据进行操作。还有许多其他新的 API&#xff0c;专注于密码学&#xf…

纪中培训总结(2019年1月21~31日)

Day 0&#xff08;21号&#xff09; 中午从家里出发&#xff0c;坐了两个小时的车&#xff08;堵得要命&#xff09;&#xff0c;过了虎门大桥&#xff0c;在一个服务站吃起了晚餐&#xff08;麦当劳的包&#xff09;&#xff0c;又坐了一个小时的车&#xff0c;终于到了&…

nssl1469-W【dp】

正题 题目大意 nnn个点的一棵树&#xff0c;每条边一个权值为0或1和一个目标权值&#xff08;0或1或者没有限制&#xff09;。每次可以将一个路径上的权值取反&#xff0c;求最小翻转数量和最小翻转路径长度。 解题思路 首先我们可以从序列的类似问题上知道一条边不会被翻转超…

[翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能

原文: Comparing AWS Lambda performance of Node.js, Python, Java, C# and GoAWS 最近宣布他们支持了 C&#xff03; (Net Core 2.0 版本) 和 Go 语言来实现 Lambda 功能。(译者注: AWS Lambda 是 AWS 推出的 Serverless 功能&#xff0c;请参阅这里或 Serverless 相关资料)做…

codeforces gym-101745 C-Infinite Graph Game 分块

题意 题目链接 给出一个顶点带权无向图。 定义访问操作&#xff1a;访问一个点&#xff0c;就要把与这个点相邻的点的权值全部都加到答案里去&#xff0c;然后给这个顶点的权值/2。现在给出一个无穷的访问序列中的一个循环节&#xff0c;求最终答案的极限是多少。 注意&…

P5579-[PA2015]Siano【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P5579 题目大意 nnn个树&#xff0c;第iii个每天长高aia_iai​米。 mmm次修剪&#xff0c;第iii次在did_idi​天&#xff0c;将高度为bib_ibi​的部分修剪掉 求每次修剪掉的高度 解题思路 按照aia_iai​排序后我们知道每次修…

【结论】立体井字棋(jzoj 2124)

立体井字棋 题目大意&#xff1a; 在一个nnn的正方体中&#xff0c;由n个格子连成一条直线的方案数&#xff08;多少种可能用n个格子连成一条直线&#xff09; 样例输入 2 样例输出 28 数据范围限制 对于30%的数据&#xff0c; n<10&#xff1b; 对于100%的数据&am…