树分治 点分治poj 2114
存在2点间距离==k 输出AYE
否则输出NAY
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector> using namespace std;
#define MAXN 100010
int n,m;
int cnt,ans,mi,root,k;
int head[MAXN],mx[MAXN],size[MAXN];
bool vis[MAXN]; struct edg
{
int w,v,next;
}x[MAXN]; void add(int u,int v,int w)
{
x[cnt].next=head[u];
x[cnt].v=v;
x[cnt].w=w;
head[u]=cnt++;
} void dfssize(int u,int fa)
{
size[u]=;
mx[u]=;
for(int i=head[u];i!=-;i=x[i].next)
{
int v=x[i].v;
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(mi>mx[u])
{
mi=mx[u];
root=u;
}
for(int i=head[u];i!=-;i=x[i].next)
{
int v=x[i].v;
if(!vis[v]&&v!=fa)
dfsroot(r,v,u);
}
}
int num;
int dis[MAXN]; 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].v;
if(!vis[v]&&v!=fa)
dfsdis(v,d+x[i].w,u);
}
}
int calc(int u,int d)
{
num=;
int ret=;
dfsdis(u,d,);
sort(dis,dis+num);
int i=,j=num-;
while(i<j)//就这边该一下
{
if(dis[i]+dis[j]<k)
i++;
else if(dis[i]+dis[j]>k)
j--;
else
{
if(dis[i]==dis[j])
{
ret+=(j-i+)*(j-i)/;
break;
}
int st=i,en=j;
while(dis[st]==dis[i])
st++;
while(dis[en]==dis[j])
en--;
ret+=(st-i)*(j-en);
i=st;
j=en;
}
}
return ret;
}
void dfs(int u)
{
mi=n;
dfssize(u,);
dfsroot(u,u,);
ans+=calc(root,);
vis[root]=;
for(int i=head[root];i!=-;i=x[i].next)
{
int v=x[i].v;
if(!vis[v])
{
ans-=calc(v,x[i].w);
dfs(v);
}
}
}
int main()
{
while(scanf("%d",&n)!=EOF&&n)
{
cnt=;
memset(head,-,sizeof(head)); for(int i=;i<=n;i++)
{
int u,v,w;
while(scanf("%d",&v)!=EOF&&v)
{
scanf("%d",&w);
add(i,v,w);
add(v,i,w);
}
}
while(scanf("%d",&k)!=EOF&&k)
{
ans=;
memset(vis,,sizeof(vis));
dfs();
if(ans>)
printf("AYE\n");
else
printf("NAY\n");
}
printf(".\n");
}
return ;
}
树分治 点分治poj 2114的更多相关文章
- poj 1741 树的点分治(入门)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 18205 Accepted: 5951 Description ...
- poj 1741 Tree(树的点分治)
poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对. 首先对于一个树中的点对,要么经过根结点,要么不经过.所以我们可以把经过根节点的符合点对统计出 ...
- POJ 1741/1987 树的点分治
树的点分治,主要思想是每次找子树的重心,计算经过根节点的情况数,再减去点对属于同一子树的情况. #include <iostream> #include <vector> #i ...
- poj 1741(树的点分治)
Tree Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dis ...
- POJ 1741 Tree 树的分治(点分治)
题目大意:给出一颗无根树和每条边的权值,求出树上两个点之间距离<=k的点的对数. 思路:树的点分治.利用递归和求树的重心来解决这类问题.由于满足题意的点对一共仅仅有两种: 1.在以该节点的子树中 ...
- POJ 1741.Tree and 洛谷 P4178 Tree-树分治(点分治,容斥版) +二分 模板题-区间点对最短距离<=K的点对数量
POJ 1741. Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 34141 Accepted: 11420 ...
- HDU4812 D Tree(树的点分治)
题目大概说给一棵有点权的树,输出字典序最小的点对,使这两点间路径上点权的乘积模1000003的结果为k. 树的点分治搞了.因为是点权过根的两条路径的LCA会被重复统计,而注意到1000003是质数,所 ...
- CF 322E - Ciel the Commander 树的点分治
树链剖分可以看成是树的边分治,什么是点分治呢? CF322E - Ciel the Commander 题目:给出一棵树,对于每个节点有一个等级(A-Z,A最高),如果两个不同的节点有相同等级的父节点 ...
- hdu 4670 树的点分治
思路:首先当然是要用树的点分治了.根节点为root,那么经过root的合法路径数求出来这题就解决了.因为我们可以用分治枚举根,最后将所有根的路径数加起来就是结果.当然这里的根不是整棵树的根,是子树根. ...
- bzoj 3435: [Wc2014]紫荆花之恋 替罪羊树维护点分治 && AC400
3435: [Wc2014]紫荆花之恋 Time Limit: 240 Sec Memory Limit: 512 MBSubmit: 159 Solved: 40[Submit][Status] ...
随机推荐
- JavaScript作用域闭包简述
JavaScript作用域闭包简述 作用域 技术一般水平有限,有什么错的地方,望大家指正. 作用域就是变量起作用的范围.作用域包括全局作用域,函数作用域以块级作用域,ES6中的let和const可以形 ...
- Collider Collision 区别
Collision 中带有碰撞的信息,例如:速度和撞击到的点 示例 void OnCollisionEnter2D(Collision2D coll) { foreach(ContactPoint c ...
- 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...
- json注入
- HTML 学习笔记 CSS(选择器2)
CSS 类选择器 类选择器允许以一种独立于文档元素的方式来指定样式 CSS 类选择器 类选择器允许以一种独立于文档元素的方式来指定样式 该选择器可以单独使用 也可以和其他元素结合使用 提示 只要适当的 ...
- http协议(三)几种数据传输方式
说说http协议的一些特点: 1)无状态 http协议是一种自身不对请求和响应之间的通信状态进行保存的协议,即无状态协议. 这种设置的好处是:更快的处理更多的请求事务,确保协议的可伸缩性 不过随着we ...
- 如何调试shell脚本
今天看shell脚本攻略的时候,看见这个方法,感觉还是不错的 #!/bin/bash function DEBUG(){ [[ $_DEBUG == 'on' ]] && $@ || ...
- cell与cell之间的间距问题,以及section跟随屏幕滑动而滑动问题
苹果在cell与cell之间默认没有间距,这样有时候不能满足我们界面要求,所以我们就需要将cell设置为分组模式(也就是每组一行或者多行,分为n组),然后我们就可以在代理中根据自己的需求设计cell之 ...
- 2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。
1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧&q ...
- Android — Camera聚焦流程
原文 http://www.cnphp6.com/archives/65098 主题 Android Camera.java autoFocus()聚焦回调函数 @Override public v ...