poj 2114 树的分治 可作模板
/*
啊啊啊啊啊啊啊本题证明一个问题,在实际应用中sort比qsort块
还有memset这类初始化能不加尽量别加,很浪费时间
原来的程序把qsort该成sort,去掉一个无用memset就a了时间不到一半
题意:和poj1741差不多,不过本题求的是dis[i]+dis[j]==dis[k];
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 11000
#define inf 0x3fffffff
struct node {
int u,v,w,next;
}bian[N*4];
int yong,head[N];
void init() {
yong=0;
memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
int minn,ma,vis[N],diss[N],len,num[N],nn;
void dfs1(int u,int fa) {
int i;
nn++;
for(i=head[u];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(v!=fa&&!vis[v])
dfs1(v,u);
}
return ;
}
int Max(int v,int vv) {
return v>vv?v:vv;
}
void dfs2(int u,int fa) {
num[u]=1;
int i,tit=0;
for(i=head[u];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(v!=fa&&!vis[v]) {
dfs2(v,u);
num[u]+=num[v];
tit=Max(tit,num[v]);
}
}
tit=Max(tit,nn-num[u]);
if(tit<minn) {
minn=tit;
ma=u;
}
return ;
}
void dfs4(int u,int fa,int w) {
int i;
diss[len++]=w;
for(i=head[u];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(v!=fa&&!vis[v])
dfs4(v,u,w+bian[i].w);
}
return ;
}
int m;
int dfs3(int u,int fa,int w) {
len=0;
dfs4(u,fa,w);
sort(diss,diss+len);
int i,j,ans=0,k;
for(i=0,j=len-1;i<j;i++) {//1000ms
while(i<j&&diss[i]+diss[j]>m)
j--;
k=j;
while(i<k&&diss[i]+diss[k]==m) {
k--;
ans++;
}
}
/*
i=0;j=len-1;
while(i<j) {//688ms
if(diss[i]+diss[j]<m)
i++;
else
if(diss[i]+diss[j]>m)
j--;
else {
if(diss[i]==diss[j]) {
ans+=(j-i+1)*(j-i)/2;
break;
}
ki=i;kj=j;
while(diss[i]==diss[ki])ki++;
while(diss[j]==diss[kj])kj--;
ans+=(ki-i)*(j-kj);
i=ki;j=kj;
}
}
*/
return ans;
}
int dfs(int u) {
minn=inf;
nn=0;
dfs1(u,-1);
dfs2(u,-1);
int ans=dfs3(ma,-1,0);
// printf("%d\n",ma);
vis[ma]=1;
int i;
for(i=head[ma];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(!vis[v]) {
ans-=dfs3(v,-1,bian[i].w);
ans+=dfs(v);
}
}
return ans;
}
int main() {
int n,i,j,k;
while(scanf("%d",&n),n) {
init();
for(i=1;i<=n;i++) {
while(scanf("%d",&j),j) {
scanf("%d",&k);
addedge(i,j,k);
addedge(j,i,k);
}
}
while(scanf("%d",&m),m) {
memset(vis,0,sizeof(vis));
k=dfs(1);
if(k)
printf("AYE\n");
else
printf("NAY\n");
}
printf(".\n");
}
return 0;
}
poj 2114 树的分治 可作模板的更多相关文章
- poj 1741 树的分治
思路:这题我是看 漆子超<分治算法在树的路径问题中的应用>写的. 附代码: #include<iostream> #include<cstring> #includ ...
- Poj 2114 Boatherds(点分治)
Boatherds Time Limit: 2000MS Memory Limit: 65536K Description Boatherds Inc. is a sailing company op ...
- POJ 2114 (点分治)
题目:https://vjudge.net/contest/307753#problem/B 题意:求树中路径和=k的点对是否存在 思路:点分治,这个题其实和上一题洛谷一样,只是这个数据强,我们不能直 ...
- poj 1987 树的分治
思路:1741的A1送 1. #include<iostream> #include<cstring> #include<algorithm> #include&l ...
- poj 1741 树的点分治(入门)
Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 18205 Accepted: 5951 Description ...
- POJ 1741 Tree 树的分治
原题链接:http://poj.org/problem?id=1741 题意: 给你棵树,询问有多少点对,使得这条路径上的权值和小于K 题解: 就..大约就是树的分治 代码: #include< ...
- POJ - 1741 - Tree - 点分治 模板
POJ-1741 题意: 对于带权的一棵树,求树中距离不超过k的点的对数. 思路: 点分治的裸题. 将这棵树分成很多小的树,分治求解. #include <algorithm> #incl ...
- poj3468(线段树区间更新&区间求和模板)
题目链接: http://poj.org/problem?id=3468 题意: 输入 n, m表初始有 n 个数, 接下来 m 行输入, Q x y 表示询问区间 [x, y]的和: C x y z ...
- [poj1741][tree] (树/点分治)
Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...
随机推荐
- crosswalk 初步使用
这里简单的说下 crossWalk 的配置; 我在学习 crosswalk 的时候,看到一篇博客,他所记录的已经是很完整的教程了: 点击查看 本文就根据该博客和官网说明,进行部分修改,补充; 首先 c ...
- magento 翻译使用实例
在自定义的模块中若想要使用翻译,需在config.xml中加入如下配置 <config> <adminhtml> //后台 <translate> <modu ...
- Android 性能优化(7)网络优化( 3) Optimizing User-Initiated Network Use
Optimizing User-Initiated Network Use This lesson teaches you to Pre-fetch Network Data Check for Co ...
- mysqladmin(MySQL管理工具)
mysqladmin是一个执行管理操作的客户端程序.它可以用来检查服务器的配置和当前状态.创建和删除数据库等. 1.mysqladmin命令的语法: shell > mysqladmin [op ...
- Java 遍历Map对象的4种方法
http://blog.csdn.net/tjcyjd/article/details/11111401
- malloc()函数的使用
malloc是向系统申请分配指定size个字节的内存空间.返回值类型为void *类型.void *表示未确定的类型指针.C语言中,void *类型可以强制转换为任何其他类型的指针. 语法:void ...
- SpringMVC中Controller类的方法返回String不跳转,而是将字符串显示到页面
问题描述: 在spring中,控制层的注解一般都是使用@Controller,如果哪个请求参数需要返回数据的话,我们可以在该方法上配合@ResponseBody注解使用,这也是比较常见的方式了. 今天 ...
- 浮动布局demo
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ubuntu+ngnix+thinkphp pathinfo配置
一.thinkphp 项目改为pathinfo模式 XXX/ThinkPHP/Conf/convention.php文件中找到 'URL_MODEL' => 1, // URL访问模式,可选参数 ...
- 梦想MxWeb3D,三维CAD协同设计平台 2019.05.05更新
SDK开发包下载地址: http://www.mxdraw.com/ndetail_20140.html 在线演示网址: http://www.mxdraw.com:3000/ 1. 增加CAD绘图 ...