P7283 [COCI2020-2021#4] Janjetina
显然点分治。
考虑设 \(Mx_i\) 为重心到 \(i\) 的链的最大值,\(L_i\) 为路径长度,那么条件变为:
\]
我们考虑直接枚举当前的 \(\max(Mx_x, Mx_y)=Mx_x\),那么需要保证之前加入的点的 \(Mx_y\) 要小于等于 \(Mx_x\),直接以 \(Mx\) 为关键字 sort 一遍,然后直接树状数组爆算。
但是这样显然会把同一个子树内的假点对给统计到,多做一遍减去即可。
复杂度 \(O(n\log^2 n)\)
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cctype>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair <int, int> Pii;
const int INF=0x3f3f3f3f;
const int mo=1e9+7;
inline int read(){
char ch=getchar();int x=0, f=1;
while(!isdigit(ch)){if(ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
inline void write(int x){
if(x<0) putchar('-'), x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline int ksm(int a, int b){
int ret=1;
for(; b; b>>=1, a=1ll*a*a%mo)
if(b&1) ret=1ll*ret*a%mo;
return ret;
}
const int N=1e5+5;
const int M=1e5;
int idc, vis[N], siz[N], Mx[N], dep[N], mn, G, tot, h[N];
struct Edge{int to, nxt, w;}d[N*2];
void add(int x, int y, int w){d[++tot]=(Edge){y, h[x], w};h[x]=tot;}
#define lowbit(x) (x&(-x))
int n, bit[N*2], K;
void add(int x, int v){
++x;
for(; x<=M; x+=lowbit(x)) bit[x]+=v;
}
int query(int x){
if((++x)<=0) return 0;
int res=0;
for(; x; x-=lowbit(x)) res+=bit[x];
return res;
}
#undef lowbit
int sta[N], top;
bool cmp(int x, int y){
return Mx[x]<Mx[y];
}
void Getg(int x, int up){
vis[x]=idc, siz[x]=1;int mx=0;
for(int i=h[x], v; i; i=d[i].nxt)
if(vis[v=d[i].to]<idc&&vis[v]!=-1)
Getg(v, up), siz[x]+=siz[v], mx=max(mx, siz[v]);
mx=max(mx, up-siz[x]);
if(mx<mn) mn=mx, G=x;
}
long long ans=0;
void solve(int L, int R, int flg){
int ls=ans;
sort(sta+L, sta+R+1, cmp);
for(int i=L; i<=R; ++i)
ans+=flg*query(Mx[sta[i]]-dep[sta[i]]-K),
add(dep[sta[i]], 1);
for(int i=L; i<=R; ++i) add(dep[sta[i]], -1);
}
void calc(int x, int rt){
vis[x]=idc;sta[++top]=x, siz[x]=1;
for(int i=h[x], v; i; i=d[i].nxt)
if(vis[v=d[i].to]<idc&&vis[v]!=-1){
int lst=top;
Mx[v]=max(Mx[x], d[i].w), dep[v]=dep[x]+1,
calc(v, 0), siz[x]+=siz[v];
if(x!=rt) continue;
solve(lst+1, top, -1);
}
if(x==rt) solve(1, top, 1);
}
void dfz(int rt){
// printf("---%d\n", rt);
++idc, dep[rt]=0, Mx[rt]=0, top=0;
calc(rt, rt), vis[rt]=-1;
for(int i=h[rt], v; i; i=d[i].nxt)
if(vis[v=d[i].to]!=-1)
++idc, G=v, mn=siz[v],
Getg(v, siz[v]), dfz(G);
}
signed main(){
n=read(), K=read();
for(int i=1, x, y, z; i<n; ++i)
x=read(), y=read(), z=read(),
add(x, y, z), add(y, x, z);
++idc, G=1, mn=n, Getg(1, n), dfz(G);
ans=2ll*ans;
printf("%lld", ans);
return 0;
}
P7283 [COCI2020-2021#4] Janjetina的更多相关文章
- codevs 2021 中庸之道
2021 中庸之道 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给定一个长度为N的序列,有Q次询问,每次 ...
- Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论
1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 130 Solved: 88[Submi ...
- poj 2021 Relative Relatives(暴力)
题目链接:http://poj.org/problem?id=2021 思路分析:由于数据较小,采用O(N^2)的暴力算法,算出所有后代的年龄,再排序输出. 代码分析: #include <io ...
- iPhone屏蔽IOS更新、iPhone系统更新的提示(免越狱,有效期更新至2021年)
iPhone屏蔽IOS更新.iPhone系统更新的提示(免越狱,有效期更新至2021年) 1.在Safari浏览器中粘贴如下链接,按提示打开链接. 输入http://apt.dataage.pub 2 ...
- HDU 2021 发工资咯:)
http://acm.hdu.edu.cn/showproblem.php?pid=2021 Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的 ...
- Math.abs(~2020) 按位取反后的绝对值是多少 2021, 按位取反后,比正数多1
Math.abs(~2020) 按位取反后的绝对值是多少 2021, 按位取反后,比正数多1 int 值的取值 范围: -128 --- 127 之间, 0000 0000 按位取 ...
- 部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930;
描述:部分PR回写的数量带有小数,分别是2023工厂的纸箱104007000389,2021工厂的纸盒404002005930: 原因:所有物料规划PR时对舍入值的先后考虑逻辑影响到回写出来的temp ...
- codves 2021中庸之道
2021 中庸之道 http://codevs.cn/problem/2021/ 题目描述 Description 给定一个长度为N的序列,有Q次询问,每次询问区间[L,R]的中位数. 数据保证序列中 ...
- HDU 2021 发工资咯:)(最水贪心)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2021 发工资咯:) Time Limit: 2000/1000 MS (Java/Others) ...
- 【BZOJ】2021: [Usaco2010 Jan]Cheese Towers(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2021 噗,自己太弱想不到. 原来是2次背包. 由于只要有一个大于k的高度的,而且这个必须放在最顶,那 ...
随机推荐
- HTML中,table怎样使用
<table> 标签用于在HTML中创建表格.表格是一种以行和列的形式组织和显示数据的结构化方式.<table> 标签通常与其他相关标签(如 <tr>.<th ...
- 自动驾驶仿真全攻略:基于CARLA+YOLOv5的自主导航实战
引言:自动驾驶仿真的战略价值 在自动驾驶技术落地的前夜,仿真测试正在成为连接算法研发与实际路测的关键桥梁.据统计,自动驾驶系统每1万公里的接管次数需从仿真测试的百万公里级数据中优化,这使得CARLA. ...
- git rebae -i
这个命令大体作用就是对本地的commit进行修改,适用于以下情况: 本地历史排查修改 code review后,打回修改 详解 pick,只是意味着包括提交.重新进行命令时,重新安排pick命令的顺序 ...
- 一天 Star 破万的开源项目「GitHub 热点速览」
虽然现在市面上的 AI 编程助手已经"琳琅满目",但顶流就是顶流!OpenAI 新开源的轻量级编程助手 Codex,发布不到 24 小时 Star 数就轻松破万!姗姗来迟的 Ope ...
- Asp.net core 少走弯路系列教程(一)了解 W3C
前言 新人学习成本很高,网络上太多的名词和框架,全部学习会浪费大量的时间和精力. 新手缺乏学习内容的辨别能力,本系列文章为新手过滤掉不适合的学习内容(比如多线程等等),让新手少走弯路直通罗马. 作者认 ...
- rider的xamarin环境安装
自从用上rider后,vs就再也没有安装过了.最近要做apk开发,就安装xamarin环境,但是总是报错: Show Log->idea.log 发现下面错误: ERROR | Environm ...
- 关于navicat导出和导入sql文件的方法
导出SQL文件 导入SQL文件 导出技巧 导出SQL文件 到处数据库的方法很简单,只需要在要到处的数据库上面右键,选择转储SQL文件,可以选结构和数据...或者结构... 导入SQL文件 导如SQL文 ...
- ServletContext相关
简介 如何得到对象 有什么作用 1.获取全局配置参数 2.获取web工程中的资源 3.存取数据,servlet间共享数据 域对象 ServlerContext的生命周期 ServletContext ...
- 【SQL周周练】一句 SQL 如何帮助 5 个人买到电影院最好的座位?
大家好,我是"蒋点数分",多年以来一直从事数据分析工作.从今天开始,与大家持续分享关于数据分析的学习内容. 本文是第 3 篇,也是[SQL 周周练]系列的第 3 篇.该系列是挑选或 ...
- 【HUST】网安|计算机网络安全实验|实验一 TCP协议漏洞及利用
写在最前: 实验指导书已经写得非常好了,这是我个人的实验记录,并没有认真整理和记录容易出问题的地方.只是免得以后忘了什么是netwox还得翻学习通. 文章目录 涉及代码的仓库地址 docker使用 建 ...