树分治 点分治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] ...
随机推荐
- codevs哈希水题
1230 多重hash练习一下,不用也可以 // // main.cpp // codeves1230 // // Created by Candy on 9/29/16. // Copyright ...
- Unity 5.3 安装完没有Android(安卓)或IOS Module(模块)?
Unity5.3 模块独立 Unity5.3把各个模块分开来了,主程序安装包更轻巧,在官网下载的话,能下载到 Unity安装程序,Unity编辑器等一些资源package,其它的模块可以通过Unity ...
- [No000017]单词拼写记不住?试试这俩方法-单词拼写,怎么记又快又好?
- poj 2481
Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16163 Accepted: 5380 Description ...
- 使用 JavaScript File API 实现文件上传
概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...
- 洛谷 U4792 Acheing 单调队列
U4792 Acheing 5通过 43提交 题目提供者Acheing 标签 难度尚无评定 提交 最新讨论 暂时没有讨论 题目背景 题目并没有什么含义,只是想宣传一下自己的博客,Acheing.com ...
- sublime text2 打开包含中文的文件会自动追加.dump后缀解决办法
用sublime text2 打开.c, .h,.txt等文件会自动追加一个.dump后缀,這样在打开.c,.h等文件时无法正常识别,从而无法正常进行语法着色,网上说是因为安装了GBK Encodin ...
- 跟我学习Storm_Storm主要特点
Storm拥有低延迟.高性能.分布式.可扩展.容错等特性,可以保证消息不丢失,消息处理严格有序.Storm的主要特点如下所示: 简单的编程模型.类似于MapReduce降低了并行批处理复杂性,Stor ...
- 如何使用 UC浏览器开发者版 进行移动端调试
在 如何用 fiddler 代理调试本地手机页 一文中我们了解了如何用手机查看 PC 端写的网页(本地),但是我们只能看到页面效果,如果哪段 js 挂了,那部分样式失效了,我们该如何进行调试呢?今天为 ...
- Bootstrap系列 -- 40. 导航条二级菜单
在导航条中添加二级菜单也非常简单 <div class="navbar navbar-default" role="navigation"> < ...