POJ 题目2114 Boatherds(树的点分治)
2015-10-08 22:54
330 查看
Boatherds
Description
Boatherds Inc. is a sailing company operating in the country of Trabantustan and offering boat trips on Trabantian rivers. All the rivers originate somewhere in the mountains and on their way down to the lowlands they gradually
join and finally the single resulting river flows to the sea. Moreover, the Trabantian villages are exactly at the rivers' springs, junctions and at the mouth of the largest river. Please note that more than 2 rivers can join at a junction. However, the rivers
always form a tree (with villages as vertices).
The pricing policy of the Boatherds is very simple: each segment of each river between two villages is assigned a price (the price is same in both directions), so if a tourist requests a journey between any two villages, the ticket office clerks just add the
prices of the segments along the only path between the villages.
One day, a very strange tourist appeared. She told the clerks that she returns to her country on the next day and she wants to spend all the remaining money on a boat trip, so they should find a route with exactly this cost. Being just poor (ahem) businessmen,
they have asked the Abacus Calculator Makers for help.
You are given a description of the river network with costs of river segments and a sequence of integers x1,..., xk. For each xi, you should determine if there is a pair of cities (a, b) in the river network such that the cost of the trip between a and b is
exactly xi.
Input
The input consists of several instances. Each instance is described by (in the following order):
A single line containing a single integer: the number of villages N (1 <= N <= 10 000).
N lines describing the villages. The i-th of these lines (1 <= i <= N) describes the village with number i. It contains space separated integers d1, c1, d2, c2, , dki, cki, 0. The dj's are numbers of villages from which the rivers
flow directly to the village i (with no other villages in between), each cj is the price of the journey between villages i and dj. Moreover, 2 <= dj <= N and 0 <= cj <= 1 000. Village 1 always corresponds to the mouth of the largest river, therefore no di
can ever be equal to 1.
M <= 100 lines describing the queries. The i-th of these lines corresponds to the i-th query and contains a single integer xi (1 <= xi <= 10 000 000).
The instance is finished by a single line containing the number 0.
The whole input is ended by a single line containing the number 0.
Output
For each instance you should produce a sequence of M lines (where M is the number of queries in the particular instance). The i-th of these lines contains the word "AYE" if there exists a pair of cities in the river network which
is connected by a path of cost xi, or the word "NAY" otherwise.
Output for each instance must be followed by a single line containing just the dot character.
Sample Input
Sample Output
Source
CTU Open 2004‘
不想玩了,,无聊水一道吧,,11点熄灯,10点50过了,有种拿顽强拼搏奖的感觉。。
和那个1747有点不同而已,就是求是否有距离为k的点对。。
ac代码
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 1712 | Accepted: 556 |
Boatherds Inc. is a sailing company operating in the country of Trabantustan and offering boat trips on Trabantian rivers. All the rivers originate somewhere in the mountains and on their way down to the lowlands they gradually
join and finally the single resulting river flows to the sea. Moreover, the Trabantian villages are exactly at the rivers' springs, junctions and at the mouth of the largest river. Please note that more than 2 rivers can join at a junction. However, the rivers
always form a tree (with villages as vertices).
The pricing policy of the Boatherds is very simple: each segment of each river between two villages is assigned a price (the price is same in both directions), so if a tourist requests a journey between any two villages, the ticket office clerks just add the
prices of the segments along the only path between the villages.
One day, a very strange tourist appeared. She told the clerks that she returns to her country on the next day and she wants to spend all the remaining money on a boat trip, so they should find a route with exactly this cost. Being just poor (ahem) businessmen,
they have asked the Abacus Calculator Makers for help.
You are given a description of the river network with costs of river segments and a sequence of integers x1,..., xk. For each xi, you should determine if there is a pair of cities (a, b) in the river network such that the cost of the trip between a and b is
exactly xi.
Input
The input consists of several instances. Each instance is described by (in the following order):
A single line containing a single integer: the number of villages N (1 <= N <= 10 000).
N lines describing the villages. The i-th of these lines (1 <= i <= N) describes the village with number i. It contains space separated integers d1, c1, d2, c2, , dki, cki, 0. The dj's are numbers of villages from which the rivers
flow directly to the village i (with no other villages in between), each cj is the price of the journey between villages i and dj. Moreover, 2 <= dj <= N and 0 <= cj <= 1 000. Village 1 always corresponds to the mouth of the largest river, therefore no di
can ever be equal to 1.
M <= 100 lines describing the queries. The i-th of these lines corresponds to the i-th query and contains a single integer xi (1 <= xi <= 10 000 000).
The instance is finished by a single line containing the number 0.
The whole input is ended by a single line containing the number 0.
Output
For each instance you should produce a sequence of M lines (where M is the number of queries in the particular instance). The i-th of these lines contains the word "AYE" if there exists a pair of cities in the river network which
is connected by a path of cost xi, or the word "NAY" otherwise.
Output for each instance must be followed by a single line containing just the dot character.
Sample Input
6 2 5 3 7 4 1 0 0 5 2 6 3 0 0 0 0 1 8 13 14 0 0
Sample Output
AYE AYE NAY AYE .
Source
CTU Open 2004‘
不想玩了,,无聊水一道吧,,11点熄灯,10点50过了,有种拿顽强拼搏奖的感觉。。
和那个1747有点不同而已,就是求是否有距离为k的点对。。
ac代码
14795687 | kxh1995 | 2114 | Accepted | 1680K | 594MS | C++ | 2644B | 2015-10-08 22:47:21 |
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> #define max(a,b) (a>b?a:b) using namespace std; #define N 100100 int head ,cnt,pre ,sum,son ,vis ,deep ,root,dis ; #define INF 0x3f3f3f3f int n,m,ans,k; struct s { int u,v,next,w; }edge[N<<1]; void add(int u,int v,int w) { edge[cnt].u=u; edge[cnt].v=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++; } void get_root(int u,int fa) { son[u]=1; pre[u]=0; int i; for(i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(v==fa||vis[v]) continue; get_root(v,u); son[u]+=son[v]; pre[u]=max(pre[u],son[v]); } pre[u]=max(pre[u],sum-son[u]); if(pre[u]<pre[root]) root=u; } void get_deep(int u,int fa) { deep[++deep[0]]=dis[u]; int i; for(i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(v==fa||vis[v]) continue; dis[v]=dis[u]+edge[i].w; get_deep(v,u); } } int get_sum(int x,int now) { dis[x]=now; deep[0]=0; get_deep(x,0); sort(deep+1,deep+1+deep[0]); int res=0,l,r; for(l=1,r=deep[0];l<r;) { if(deep[l]+deep[r]==k) { res+=(r-l); l++; } else if(deep[l]+deep[r]<k) { l++; } else r--; } return res; } void work(int x) { ans+=get_sum(x,0); vis[x]=1; int i; for(i=head[x];i!=-1;i=edge[i].next) { int v=edge[i].v; if(vis[v]) continue; ans-=get_sum(v,edge[i].w); sum=son[v]; root=0; get_root(v,root); work(root); } } int main() { while(scanf("%d",&n)!=EOF,n) { int i; cnt=0; memset(head,-1,sizeof(head)); for(i=1;i<=n;i++) { int x; while(scanf("%d",&x)!=EOF,x) { int c; scanf("%d",&c); add(i,x,c); add(x,i,c); } } while(scanf("%d",&k)!=EOF,k) { sum=n; pre[0]=INF; memset(vis,0,sizeof(vis)); root=0; get_root(1,0); ans=0; work(root); if(ans) printf("AYE\n"); else printf("NAY\n"); } printf(".\n"); } }
相关文章推荐
- VC++压缩解压zip文件(支持密码)
- linux自动备份
- Android-ListView-Adapter view无复用
- ACM学习历程—HDU1695 GCD(容斥原理 || 莫比乌斯)
- objective_c
- java内部类 和外嵌类
- SQL Server 的几个故障
- 数据结构开场白
- BestCoder Round #52 (div.2)HDU5417 Victor and Machine
- ubuntu设置ssh登陆
- 2016小米校招笔试题
- 基础总结篇之五:BroadcastReceiver应用详解
- CentOS 7 最小安装 功能扩展
- 多数投票算法
- 霍夫变换检测直线
- [CareerCup] 10.5 Web Crawler 网络爬虫
- php发送get、post请求的几种方法
- bin2dec函数
- Leetcode | Climbing Stairs
- 102-整合log4j和flume架构