Codeforces 519E A and B and Lecture Rooms
http://codeforces.com/contest/519/problem/E
题意:
给出一棵树和m次询问,每次询问给出两个点,求出到这两个点距离相等的点的个数。
思路:
lca...然后直接判就好了,挂dp标签的人是什么心态。。
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- #include<cstring>
- #include<iostream>
- int tot,go[],first[],next[];
- int son[],fa[][];
- int deep[];
- int n,bin[];
- int read(){
- int t=,f=;char ch=getchar();
- while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
- while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
- return t*f;
- }
- void insert(int x,int y){
- tot++;
- go[tot]=y;
- next[tot]=first[x];
- first[x]=tot;
- }
- void add(int x,int y){
- insert(x,y);insert(y,x);
- }
- void dfs(int x,int f){
- son[x]=;
- for (int i=;i<=;i++)
- fa[x][i]=fa[fa[x][i-]][i-];
- for (int i=first[x];i;i=next[i]){
- int pur=go[i];
- if (pur==f) continue;
- deep[pur]=deep[x]+;
- fa[pur][]=x;
- dfs(pur,x);
- son[x]+=son[pur];
- }
- }
- int lca(int x,int y){
- if (deep[x]<deep[y]) std::swap(x,y);
- int t=deep[x]-deep[y];
- for (int i=;i<=;i++)
- if (t&bin[i])
- x=fa[x][i];
- if (x==y) return x;
- for (int i=;i>=;i--)
- if (fa[x][i]!=fa[y][i])
- x=fa[x][i],y=fa[y][i];
- if (x==y) return x;
- else return fa[x][];
- }
- void up(int &x,int dep){
- int t=deep[x]-dep;
- for (int i=;i<=;i++)
- if (t&bin[i])
- x=fa[x][i];
- }
- void work(int x,int y){
- int t=lca(x,y);
- int len=deep[x]-deep[t]++deep[y]-deep[t]+-;
- if (len%==){
- printf("0\n");
- return;
- }
- if (x==y){
- printf("%d\n",n);
- return;
- }
- if (t==x||t==y){
- if (t==x) std::swap(x,y);
- int tt=x;
- up(tt,deep[tt]-len/);
- up(x,deep[tt]+);
- printf("%d\n",son[tt]-son[x]);
- }else{
- if (deep[x]<deep[y]) std::swap(x,y);
- if (deep[x]==deep[y]){
- up(x,deep[t]+);
- up(y,deep[t]+);
- printf("%d\n",n-son[x]-son[y]);
- }else{
- int tt=x;
- up(tt,deep[tt]-len/);
- up(x,deep[tt]+);
- printf("%d\n",son[tt]-son[x]);
- }
- }
- }
- int main(){
- n=read();bin[]=;for (int i=;i<=;i++) bin[i]=bin[i-]*;
- for (int i=;i<n;i++){
- int x=read(),y=read();
- add(x,y);
- }
- dfs(,);
- int T=read();
- while (T--){
- int x=read(),y=read();
- work(x,y);
- }
- return ;
- }
Codeforces 519E A and B and Lecture Rooms的更多相关文章
- codeforces 519E A and B and Lecture Rooms LCA倍增
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...
- codeforces 519E A and B and Lecture Rooms(LCA,倍增)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud E. A and B and Lecture Rooms A and B are ...
- CodeForces 519E A and B and Lecture Rooms(倍增)
A and B are preparing themselves for programming contests. The University where A and B study is a s ...
- Codeforces 519E A and B and Lecture Rooms [倍增法LCA]
题意: 给你一棵有n个节点的树,给你m次询问,查询给两个点,问树上有多少个点到这两个点的距离是相等的.树上所有边的边权是1. 思路: 很容易想到通过记录dep和找到lca来找到两个点之间的距离,然后分 ...
- Codeforces Round #294 (Div. 2) A and B and Lecture Rooms(LCA 倍增)
A and B and Lecture Rooms time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- [CF Round #294 div2] E. A and B and Lecture Rooms 【树上倍增】
题目链接:E. A and B and Lecture Rooms 题目大意 给定一颗节点数10^5的树,有10^5个询问,每次询问树上到xi, yi这两个点距离相等的点有多少个. 题目分析 若 x= ...
- [codeforces 519E]E. A and B and Lecture Rooms(树上倍增)
题目:http://codeforces.com/problemset/problem/519/E 题意:给你一个n个点的树,有m个询问(x,y),对于每个询问回答树上有多少个点和x,y点的距离相等 ...
- CodeForces 519E 树形DP A and B and Lecture Rooms
给出一棵树,有若干次询问,每次询问距两个点u, v距离相等的点的个数. 情况还挺多的,少侠不妨去看官方题解.^_^ #include <iostream> #include <cst ...
- Codeforces 519 E. A and B and Lecture Rooms
Description 询问一个树上与两点距离相等的点的个数. Sol 倍增求LCA. 一棵树上距离两点相等,要么就只有两点的中点,要么就是与中点相连的所有点. 有些结论很容易证明,如果距离是偶数,那 ...
随机推荐
- CCF 送货 + 欧拉路模板
#include <bits/stdc++.h> using namespace std; stack<int> st; vector<]; ][]; ],cp[]; i ...
- [饭后算法系列] 数组中"和非负"的最长子数组
1. 问题 给定一列数字数组 a[n], 求这个数组中最长的 "和>=0" 的子数组. (注: "子数组"表示下标必须是连续的. 另一个概念"子 ...
- BeanstalkClient学习
针对BeanstalkClient-1.4.6.jar 生产者 示例代码: package com.lky.test; import java.io.UnsupportedEncodingExcept ...
- 基于Hadoop集群的HBase集群的配置
一 Hadoop集群部署 hadoop配置 二 Zookeeper集群部署 zookeeper配置 三 Hbase集群部署 1.配置hbase-env.sh HBASE_MANAGES_ZK:用来 ...
- uploadify不能正确显示中文的按钮文本的解决办法
uploadify 目前不能正确显示中文的按钮文本. 我发现bug的原因是uploadify错误的使用了 js 的 escape 和 flash 的 unescape配对,而这2个是不兼容的.正确的转 ...
- [置顶] .net技术类面试、笔试题汇总3
今天本人从成都回到了学校,深刻认识了自己存在很多不足,在这段期间会更加努力,争取早日找到一个好工作! 41.在ASP.NET中有Button控件myButton,要是单击控件时,导航到其他页面http ...
- 【剑指Offer学习】【面试题56:链表中环的入口结点】
题目:一个链表中包括环.怎样找出环的入口结点? 解题思路 能够用两个指针来解决问题.先定义两个指针P1和P2指向链表的头结点.假设链表中环有n个结点,指针P1在链表上向前移动n步,然后两个指针以同样的 ...
- 复合命令A等效于$a
时间:2014.06.28 地点:基地 ------------------------------------------------------------------------------- ...
- Creating Apps With Material Design —— Defining Shadows and Clipping Views
View转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出,谢谢 定义阴影和裁减 材料设计引入了深度的 ...
- QLCDNumber设置背景色和显示数字颜色
只看楼主 倒序阅读楼主 发表于: 2013-10-22 //LCD时间显示 QLCDNumber *m_pLcdTime = new QLCDNumber(thi ...