BZOJ 1468: Tree
Description
真·树,问距离不大于 \(k\) 的点对个数.
Sol
点分治.
同上.
Code
- /**************************************************************
- Problem: 1468
- User: BeiYu
- Language: C++
- Result: Accepted
- Time:832 ms
- Memory:3804 kb
- ****************************************************************/
- #include<cstdio>
- #include<utility>
- #include<vector>
- #include<queue>
- #include<algorithm>
- #include<iostream>
- using namespace std;
- typedef pair< int,int > pr;
- #define mpr make_pair
- #define debug(a) cout<<#a<<"="<<a<<" "
- const int N = 40005;
- int n,m,k,rt,sz,ans;
- vector<pr> g[N];
- int s[N],f[N],b[N];
- vector<int> d;
- int q[N],h,t;
- inline int in(int x=0,char ch=getchar()){ while(ch>'9' || ch<'0') ch=getchar();
- while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
- void GetRoot(int u,int fa){
- s[u]=1,f[u]=0;
- for(int i=0,v;i<g[u].size();i++) if((v=g[u][i].first)!=fa && !b[v]){
- GetRoot(v,u),s[u]+=s[v],f[u]=max(f[u],s[v]);
- }f[u]=max(f[u],sz-s[u]);if(f[u]<f[rt]) rt=u;
- }
- void GetDeep(int u,int fa,int dep){
- d.push_back(dep),s[u]=1;
- for(int i=0,v;i<g[u].size();i++) if((v=g[u][i].first)!=fa && !b[v])
- GetDeep(v,u,dep+g[u][i].second),s[u]+=s[v];
- }
- int Calc(int u,int w){
- d.clear(),GetDeep(u,u,w);
- sort(d.begin(),d.end());
- int res=0;
- for(int l=0,r=d.size()-1;l<r;) if(d[l]+d[r]<=k) res+=r-l,l++;else r--;
- return res;
- }
- void GetAns(int u){
- ans+=Calc(u,0);b[u]=1;
- for(int i=0,v;i<g[u].size();i++) if(!b[v=g[u][i].first])
- ans-=Calc(v,g[u][i].second),f[0]=sz=s[v],GetRoot(v,rt=0),GetAns(rt);
- }
- int main(){
- // freopen("in.in","r",stdin);
- n=in();
- for(int i=1,u,v,w;i<n;i++) u=in(),v=in(),w=in(),g[u].push_back(mpr(v,w)),g[v].push_back(mpr(u,w));
- k=in();
- f[rt=0]=sz=n;
- GetRoot(1,0);
- GetAns(rt);
- cout<<ans<<endl;
- return 0;
- }
BZOJ 1468: Tree的更多相关文章
- bzoj 1468 Tree(点分治模板)
1468: Tree Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1527 Solved: 818[Submit][Status][Discuss] ...
- 【刷题】BZOJ 1468 Tree
Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是 ...
- bzoj 1468 Tree 点分
Tree Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1972 Solved: 1101[Submit][Status][Discuss] Desc ...
- BZOJ.1468.Tree(点分治)
BZOJ1468 POJ1741 题意: 计算树上距离<=K的点对数 我们知道树上一条路径要么经过根节点,要么在同一棵子树中. 于是对一个点x我们可以这样统计: 计算出所有点到它的距离dep[] ...
- BZOJ 1468 Tree 【模板】树上点分治
#include<cstdio> #include<algorithm> #define N 50010 #define M 500010 #define rg registe ...
- bzoj 2212 Tree Rotations
bzoj 2212 Tree Rotations 考虑一个子树 \(x\) 的左右儿子分别为 \(ls,rs\) .那么子树 \(x\) 内的逆序对数就是 \(ls\) 内的逆序对数,\(rs\) 内 ...
- 【BZOJ】1468: Tree(点分治)
http://www.lydsy.com/JudgeOnline/problem.php?id=1468 分治真是一门高大上的东西... 好神... 树分治最好资料是:qzc的<分治算法在树的路 ...
- [bzoj 1468][poj 1741]Tree [点分治]
Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...
- 【BZOJ 1468】Tree 点分治
点分治$O(nlogn)$ 坚持到月考结束后新校就剩下我一个OIer,其他人早已停课了,老师估计懒得为我一个人开机房门,让我跟班主任说了一声,今晚就回到了老校,开始了自己都没有想到会来的这么早的停课生 ...
随机推荐
- linux手动或者自动启动oracle11g的服务 Oracle 自动启动脚本
手动启动: [oracle@localhost ~]$ sqlplus SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 26 23:39:52 2 ...
- How to know if file is complete on the server using FTP
This is a very old and well-known problem. There is no way to be absolutely certain a file being wri ...
- ILMerge
ILMerge http://www.microsoft.com/en-hk/download/details.aspx?id=17630 ILMerge 下载地址:http://www.micros ...
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...
- linux程序调试命令strace
strace命令用法详解: strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须 ...
- 微信C# SDK
微信C# SDK # 模块功能 DLL 1 基础库 Senparc.Weixin.dll 2 微信公众号 / 微信支付 / JSSDK / 摇周边 / 等等 Senparc.Weixin.MP.dll ...
- Spring4学习笔记-AOP
1.加入jar包 com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEAS ...
- struts2上传文件添加进度条
给文件上传添加进度条,整了两天终于成功了. 想要添加一个上传的进度条,通过分析,应该是需要不断的去访问服务器,询问上传文件的大小.通过已上传文件的大小, 和上传文件的总长度来评估上传的进度. 实现监听 ...
- 30秒搭建Github Page
如果中国每个程序员都写博客,那么中国IT届的春天就来了 原文转自我的前端博客,链接:http://www.hacke2.cn/create-github-page/ 有同学问我的网站是怎么创建的,其实 ...
- 【AngularJS】—— 11 指令的交互
前面基本了解了指令的相关内容: 1 如何自定义指令 2 指令的复用 本篇看一下指令之间如何交互.学习内容来自<慕课网 指令3> 背景介绍 这例子是视频中的例子,有一个动感超人,有三种能力, ...