bzoj 3365 [Usaco2004 Feb]Distance Statistics 路程统计(点分治,单调)

时间:2021-10-09 06:27:20

【题意】

求树上长度不超过k的点对数目。

【思路】

Tree 一样一样的。

就是最后统计的时候别忘把根加上。

【代码】

 #include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; typedef long long ll;
const int N = 2e5+; ll read() {
char c=getchar();
ll f=,x=;
while(!isdigit(c)) {
if(c=='-') f=-; c=getchar();
}
while(isdigit(c))
x=x*+c-'',c=getchar();
return x*f;
} struct Edge {
int v,w,nxt;
}e[N<<];
int en=,front[N];
void adde(int u,int v,int w)
{
e[++en]=(Edge){v,w,front[u]}; front[u]=en;
} int n,m,K,ans;
int rt,size,list[N],vis[N],dis[N],siz[N],f[N],l1,l2; bool cmp(const int& x,const int& y)
{
return dis[x]<dis[y];
}
void get_root(int u,int fa)
{
siz[u]=; f[u]=;
trav(u,i) if(!vis[e[i].v]&&e[i].v!=fa){
int v=e[i].v;
get_root(v,u);
siz[u]+=siz[v];
if(f[u]<siz[v]) f[u]=siz[v];
}
f[u]=max(f[u],size-siz[u]);
if(f[u]<f[rt]) rt=u;
}
void dfs(int u,int fa)
{
list[++l1]=u;
trav(u,i)
if(!vis[e[i].v]&&e[i].v!=fa) {
int v=e[i].v;
dis[v]=dis[u]+e[i].w;
dfs(v,u);
}
}
int get_ans(int l,int r)
{
sort(list+l,list+r+,cmp);
int j=r,ans=;
for(int i=l;i<=r;i++) {
while(j>i&&dis[list[j]]+dis[list[i]]>K) j--;
ans+=j-i; if(i==j) break;
}
return ans;
}
void solve(int u)
{
vis[u]=; l1=l2=;
trav(u,i) if(!vis[e[i].v]) {
int v=e[i].v;
dis[v]=e[i].w;
dfs(v,-);
ans-=get_ans(l2+,l1);
l2=l1;
}
list[++l1]=u; dis[u]=;
ans+=get_ans(,l1);
trav(u,i) if(!vis[e[i].v]) {
rt=; get_root(e[i].v,-);
size=siz[e[i].v];
solve(rt);
}
} int main()
{
n=read(),m=read();
int u,v,w; char s[];
FOR(i,,m) {
u=read(),v=read(),w=read();
adde(u,v,w),adde(v,u,w);
scanf("%s",s);
}
K=read();
size=f[]=n;
get_root(,-);
solve(rt);
printf("%d\n",ans);
return ;
}

bzoj 3365 [Usaco2004 Feb]Distance Statistics 路程统计(点分治,单调)的更多相关文章

  1. BZOJ 3365&colon; &lbrack;Usaco2004 Feb&rsqb;Distance Statistics 路程统计

    Description 一棵树,统计距离不大于 \(k\) 的点对个数. Sol 点分治. 发现自己快把点分治忘干净了... 找重心使所有儿子的最大值尽量小,然后每次处理全部子树,再减去每个子树的贡献 ...

  2. 【刷题】BZOJ 3365 &lbrack;Usaco2004 Feb&rsqb;Distance Statistics 路程统计

    Description 在得知了自己农场的完整地图后(地图形式如前三题所述),约翰又有了新的问题.他提供 一个整数K(1≤K≤109),希望你输出有多少对农场之间的距离是不超过K的. Input 第1 ...

  3. bzoj 3365&colon; &lbrack;Usaco2004 Feb&rsqb;Distance Statistics 路程统计【容斥原理&plus;点分治】

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

  4. BZOJ&lowbar;3365&lowbar;&lbrack;Usaco2004 Feb&rsqb;Distance Statistics 路程统计&amp&semi;&amp&semi;POJ&lowbar;1741&lowbar;Tree&lowbar;点分治

    BZOJ_3365_[Usaco2004 Feb]Distance Statistics 路程统计&&POJ_1741_Tree_点分治 Description     在得知了自己农 ...

  5. BZOJ1468&colon; Tree &amp&semi; BZOJ3365&colon; &lbrack;Usaco2004 Feb&rsqb;Distance Statistics 路程统计

    [传送门:BZOJ1468&BZOJ3365] 简要题意: 给出一棵n个点的树,和每条边的边权,求出有多少个点对的距离<=k 题解: 点分治模板题 点分治的主要步骤: 1.首先选取一个点 ...

  6. BZOJ 3364&colon; &lbrack;Usaco2004 Feb&rsqb;Distance Queries 距离咨询

    Description 一棵树,询问两点间距离. Sol 倍增. 方向没用. 没有然后了. Code /************************************************ ...

  7. BZOJ 3367&colon; &lbrack;Usaco2004 Feb&rsqb;The Big Game 球赛&lpar; dp &rpar;

    dp(i)表示前i个人最少坐多少辆车, dp(i) = min(dp(j) + 1, dp(i)) (0 <= j < i 且 (i, j]的人能坐在一辆车上) 时间复杂度O(n²) -- ...

  8. BZOJ 3363&colon; &lbrack;Usaco2004 Feb&rsqb;Cow Marathon 奶牛马拉松

    Description 给你一个图,两个点至多有一条路径,求最长的一条路径. \(n \leqslant 4\times 10^4\) Sol DFS?DP? 这就是一棵树,方向什么的都没用... 然 ...

  9. BZOJ 3362&colon; &lbrack;Usaco2004 Feb&rsqb;Navigation Nightmare 导航噩梦

    Description 给你每个点与相邻点的距离和方向,求两点间的曼哈顿距离. \(n \leqslant 4\times 10^4\) . Sol 加权并查集. 像向量合成一样合并就可以了,找 \( ...

随机推荐

  1. 一点公益商城开发系统模式Ring Buffer&plus;

    一个队列如果只生产不消费肯定不行的,那么如何及时消费Ring Buffer的数据呢?简单的方案就是当Ring Buffer"写满"的时候一次性将数据"消费"掉. ...

  2. Asp&period;Net实现FORM认证的一些使用技巧&lpar;转&rpar;

    最近因为项目代码重构需要重新整理用户登录和权限控制的部分,现有的代码大体是参照了.NET的FORM认证,并结合了PORTAL KITS的登录控制,代码比较啰嗦,可维护性比较差.于是有了以下的几个需求( ...

  3. PHP一些函数

     函数不定参数: func_num_args // 获得参数个数 func_get_args // 获得参数数组 call_user_func('function_name', $parameter) ...

  4. PHP获取图片颜色值,检测图片主要颜色的代码:

    <?php $i=imagecreatefromjpeg("photo3.jpg");//测试图片,自己定义一个,注意路径 for ($x=0;$x<imagesx($ ...

  5. TsFltMgr&period;sys其原因是,该系统蓝屏QQ计算机管理器!

    同事一WindowsXP系统,正常执行,关闭后,第二天无法启动.详细症状为: (1)安全模式以及带网络功能的安全模式都能够进入. (2)正常模式.还没出现WindowXP滚动栏就開始重新启动: (3) ...

  6. ueditor插入百度音乐无法播放-403 问题

    简单记录一下,其实403是因为百度音乐设置了禁止外部连接引用,因此 几乎所有的百度音乐播放都会提示403. 注意:预览页面(dialog/music/music.html)和实际插入页面(uedito ...

  7. 写给自己的小CASE

    一时的完美不代表什么,重要的是不断地学习和成长:直面挑战,不断进取.   摘自<看见成长的自己>.

  8. 学习笔记(一)---&gt&semi;《Java 8编程官方参考教程(第9版)&period;pdf》:第一章到六章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.违者本人不负法律责任.违法者自负一切法律责任. ...

  9. ionic之angular1&period;X缓存问题解决

    众所周知ionic的angular1.X解决缓存的问题有: 1.在app.js里面修改:默认是true,设置了缓存 .state('tab.msg-main', { url: '/msg-main', ...

  10. Control-Tree

    Fast Failover for Control Traffic in Software-defined Networks 2012 应该是第一篇关于控制树的,讨论了关于In-Band控制平面单个控 ...