树分治 poj 1741
n k
n个节点的一棵树 k是距离
求树上有几对点距离<=k;
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector> using namespace std;
#define MAXN 100100 int head[MAXN];
bool vis[MAXN];
struct edg
{
int to,next,w;
}x[MAXN];
int cnt,ans,n,k,root;
int mi,num;
int mx[MAXN],size[MAXN],dis[MAXN]; //分别 是去掉这个点的子树最大节点数 以这个节点为根的子树包括的节点树(包括自己) 就一个存距离的数组 void add(int u,int v,int w)
{
x[cnt].next=head[u];
x[cnt].w=w;
x[cnt].to=v;
head[u]=cnt++;
}
void dfssize(int u,int fa) //树DP差不多 包括的节点
{
size[u]=;
mx[u]=;
for(int i=head[u];i!=-;i=x[i].next)
{
int v=x[i].to;
if(v!=fa&&!vis[v])
{
dfssize(v,u);
size[u]+=size[v];
if(size[v]>mx[u]) //这边子树更新一下 下面还有更新
mx[u]=size[v];
}
}
}
void dfsroot(int r,int u,int fa)
{
if(size[r]-size[u]>mx[u]) //根节点另外一边
mx[u]=size[r]-size[u];
if(mx[u]<mi) //找重心
{
mi=mx[u];
root=u;
}
for(int i=head[u];i!=-;i=x[i].next)
{
int v=x[i].to;
if(v!=fa&&!vis[v])
dfsroot(r,v,u);
}
}
void dfsdis(int u,int d,int fa)//存一下距离
{
dis[num++]=d;
for(int i=head[u];i!=-;i=x[i].next)
{
int v=x[i].to;
if(v!=fa&&!vis[v])
dfsdis(v,d+x[i].w,u);
}
}
int calc(int u,int d)
{
int ret=;
num=;
dfsdis(u,d,);
sort(dis,dis+num);
int i=,j=num-;
while(i<j) //自己模拟一下 算出有多少对
{
while(dis[i]+dis[j]>k&&i<j)
j--;
ret+=j-i;
i++;
}
return ret;
}
void dfs(int u)
{
mi=n;
dfssize(u,);
dfsroot(u,u,);
ans+=calc(root,); //这边算出来的还要减去 在它的一颗子树中(2个节点)如果满足 上面条件 其实并没什么用 但是多算了
vis[root]=;
for(int i=head[root];i!=-;i=x[i].next)
{
int v=x[i].to;
if(!vis[v])
{
ans-=calc(v,x[i].w); //所以这边要减掉
dfs(v);
}
}
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==k&&k==)
break;
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
ans=cnt=;
for(int i=;i<n;i++)
{
int a,b,w;
scanf("%d%d%d",&a,&b,&w);
add(a,b,w);
add(b,a,w);
}
dfs();
printf("%d\n",ans);
}
return ;
}
树分治 poj 1741的更多相关文章
- 点分治——POJ 1741
写的第一道点分治的题目,权当认识点分治了. 点分治,就是对每条过某个点的路径进行考虑,若路径不经过此点,则可以对其子树进行考虑. 具体可以看menci的blog:点分治 来看一道例题:POJ 1741 ...
- 树上点分治 poj 1741
Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v ...
- poj 1741 树的点分治(入门)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 18205 Accepted: 5951 Description ...
- POJ 1741.Tree 树分治 树形dp 树上点对
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 24258 Accepted: 8062 Description ...
- POJ 1741 树分治
题目链接[http://poj.org/problem?id=1741] 题意: 给出一颗树,然后寻找点对(u,v)&&dis[u][v] < k的对数. 题解: 这是一个很经典 ...
- poj 1741 Tree(树的点分治)
poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对. 首先对于一个树中的点对,要么经过根结点,要么不经过.所以我们可以把经过根节点的符合点对统计出 ...
- POJ 1741 Tree【树分治】
第一次接触树分治,看了论文又照挑战上抄的代码,也就理解到这个层次了.. 以后做题中再慢慢体会学习. 题目链接: http://poj.org/problem?id=1741 题意: 给定树和树边的权重 ...
- poj 1741 楼教主男人八题之中的一个:树分治
http://poj.org/problem? id=1741 Description Give a tree with n vertices,each edge has a length(posit ...
- 【POJ 1741】 Tree (树的点分治)
Tree Description Give a tree with n vertices,each edge has a length(positive integer less than 100 ...
随机推荐
- inverse理解
首先术语inverse 被翻译为反转的意思.inverse 制定了关联关系中的方向. 当set的inverse属性默认情况下,hibernate会按照持久化对象的属性变化来同步更新数据库. 得到两条s ...
- 虚拟机软件VMware Workstation Pro的安装与使用
聚焦行业最佳实践,BDTC 2016完整议程公布 Java 编程入门(系列) 程序员11月书讯,评论得书啦 免费的知识库,你的知识库 虚拟机软件VMware Workst ...
- Java之反射机制
一:基本概念:在Java运行时,对于任意一个类,能否知道这个类对应的属性和方法?对于一个对象,能否知道可以调用它的哪些方法?YES! 这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言 ...
- 渗透中Necat的另类用法
Necat 是一个伟大而实用的用于 TCP 和 UPD 网络连接协议的读写程序.同时 Necat 也被誉为网络中的瑞士军刀,在许多黑客教程中 Necat 也被广泛使用.Necat 最常见用途是设置反向 ...
- poj2531 Network Saboteur
Network Saboteur Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11122 Accepted: 5372 ...
- PAT 1029. 旧键盘(20)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在2行中分别给出应该输入的文字.以及实际 ...
- Shell脚本语法
索引 1. 第一行必须是"#!/bin/sh" 2. 注释:一行开头为 # 3. 定义变量 4. 逻辑符号 5. 接收参数 6. 控制流:if/then/elif/else/f ...
- jboss EAP 6.2+ 通过代码控制JNDI数据源
通过Jboss提供的API,可以操控JBoss,效果跟在管理控制台手动操作完全一样,下面是示例代码: 一.pom.xml添加依赖项 <dependency> <groupId> ...
- Openwrt Image Builder/SDK 初探
image builder和SDK既可以从官网上下载,又可以自己进行编译(make menuconfig).官网上下载的是预先帮你编译好的,这样可以大量节省自己编译源码花的时间,这两个东西相当于半成品 ...
- php-fpm 启动参数及重要配置详解
约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...