统计在一个root下的两个子树,每个子树都和前面的运算一下再加进去对于这种需要排序的运算很麻烦,所以考虑先不去同子树内点对的算出合法点对个数,然后减去每一棵子树内的合法点对(它们实际上是不合法的,相当于一个容斥)
算点对用排序+双指针即可

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1000005;
int n,m,h[N],cnt,rt,sz,si[N],mx[N];
long long dis[N],a[N],tot,ans;
bool v[N];
struct qwe
{int ne,to,va;
}e[N];
int read()
{int r=0,f=1;char p=getchar();while(p>'9'||p<'0'){if(p=='-')f=-1;p=getchar();}while(p>='0'&&p<='9'){r=r*10+p-48;p=getchar();}return r*f;
}
void add(int u,int v,int w)
{cnt++;e[cnt].ne=h[u];e[cnt].to=v;e[cnt].va=w;h[u]=cnt;
}
void gtrt(int u,int fa)
{si[u]=1;mx[u]=0;for(int i=h[u];i;i=e[i].ne)if(e[i].to!=fa&&!v[e[i].to]){gtrt(e[i].to,u);si[u]+=si[e[i].to];mx[u]=max(mx[u],si[e[i].to]);}mx[u]=max(mx[u],sz-si[u]);if(mx[u]<mx[rt])rt=u;
}
void gtde(int u,int fa)
{a[++tot]=dis[u];for(int i=h[u];i;i=e[i].ne)if(e[i].to!=fa&&!v[e[i].to]){dis[e[i].to]=dis[u]+e[i].va;gtde(e[i].to,u);}
}
long long clc(int u)
{tot=0;gtde(u,0);int re=0,l=1,r=tot;sort(a+1,a+tot+1);while(l<r){while(l<r&&a[l]+a[r]>m)   r--;re+=r-l,l++;}return re;
}
void wk(int u)
{v[u]=1;dis[u]=0;ans+=clc(u);for(int i=h[u];i;i=e[i].ne)if(!v[e[i].to]){dis[e[i].to]=e[i].va;ans-=clc(e[i].to);sz=si[e[i].to],rt=0;gtrt(e[i].to,0);wk(rt);}
}
int main()
{n=read(),m=read();for(int i=1;i<n;i++){int x=read(),y=read(),z=read();add(x,y,z),add(y,x,z);}m=read();sz=mx[0]=n;gtrt(1,0);wk(rt);printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/lokiii/p/10105488.html

bzoj 3365: [Usaco2004 Feb]Distance Statistics 路程统计【容斥原理+点分治】相关推荐

  1. bzoj 3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助(set+贪心)

    3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助 Time Limit: 10 Sec  Memory Limit: 128 MB S ...

  2. bzoj 3367: [Usaco2004 Feb]The Big Game 球赛(DP)

    3367: [Usaco2004 Feb]The Big Game 球赛 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 56  Solved: 45 ...

  3. bzoj 3369: [Usaco2004 Feb]Pesky Parentheses 烦人括号(思维题)

    3369: [Usaco2004 Feb]Pesky Parentheses 烦人括号 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 14  Sol ...

  4. bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)

    3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 121  ...

  5. 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦

    [bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 ​ 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...

  6. C++Poisso statistics泊松统计的实现算法(附完整源码)

    C++Poisso statistics泊松统计的实现算法 C++Poisso statistics泊松统计的实现算法完整源码(定义,实现,main函数测试) C++Poisso statistics ...

  7. BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集

    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...

  8. Spark 机器学习 概括统计 summary statistics [摘要统计]

    概括统计 概括统计 summary statistics [摘要统计] 读取要分析的数据,把数据转变成RDD[Vector]类型: 然后,我们调用colStats()方法,得到一个Multivaria ...

  9. BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )

    最小最大...又是经典的二分答案做法.. -------------------------------------------------------------------------- #inc ...

最新文章

  1. Python学习入门基础教程(learning Python)--3.3.3 Python逻辑关系表达式
  2. 【一步一步学习spring】spring bean管理(上)
  3. 虚拟主机时代:美国主机如何在国内显神通
  4. 【收藏】win10将wsl升级到wsl2
  5. Android Glide 加载圆形图片(绝对实用)
  6. 比特(bit)和字节(byte)(1byte=8bit)
  7. Chapter1-4_Speech_Recognition(HMM)
  8. destoon 短信发送函数及短信接口修改
  9. Mind_Manager_2
  10. 加快Linux上yum下载安装包的速度(以CentOS 7,安装gcc为例)
  11. mysql查询结果添加序号
  12. Java中具有相同属性的两个类互相赋值
  13. 第九章(三)多阶段决策问题
  14. windows 消息
  15. 应用计算机测线性电阻伏安特性曲线,线性电阻的伏安特性曲线总结分析.docx
  16. 蛋白质结构预测大赛top1方案分享
  17. Educational Codeforces Round 101 (Rated for Div. 2)
  18. 2022年湖北省住建厅特种作业操作证怎么报考?甘建二
  19. HTML5+CSS3期末大作业——城市简介
  20. android 比较靠谱的图片压缩

热门文章

  1. linux下gdb调试方法和技巧详解
  2. u-boot的mkconfig文件详解
  3. 汇编语言王爽第二版-课后答案以及解析
  4. BugkuCTF-Misc:啊哒~
  5. SSO单点登录和OAuth2.0的区别和理解
  6. JVM_03 运行时数据区 [ 虚拟机栈 ]
  7. DSP学习 -- GPS时间校准电脑系统时间
  8. Java try和catch的使用
  9. 另一种绕过 Android P以上非公开API限制的办法
  10. 2018汇总数据结构算法篇