树(tree)

【题目描述】

方方方种下了三棵树,一年后,第一棵树长出了n个节点。

方方方会向你提出m个询问,每个询问给出两个数i,j,你需要回答i号节点和j号节点在树上的距离。

【输入数据】

第一行两个整数n,m。接下来n-1行每行两个整数a,b表示一条边。接下来m行每行两个整数i,j表示询问。

【输出数据】

m行,每行一个整数表示答案。

【样例输入】

3 2

1 2

1 3

3 2

1 1

【样例输出】

2

0

【数据范围】

对于30%的数据,n,m<=1000。

对于100%的数据,n,m<=500000。


裸lca

//lca教程 http://www.cnblogs.com/gc812/p/5839501.html

这道题和lca的关系:
对于这道题来说
假设区间是f[i,j]
最小值是__min
答案就是f[i]-__min + f[j]-__min
path就没什么用了

先写RMQ 然后DFS的时候 这道题数据很大 保存成双向邻接表然后遍历一边就行了

#include <cstdio>
#include <vector>
#include <cstring>
#include <map>
using namespace std;
typedef vector<vector<int> > vv;
void get_path(vector<int>& path,const vv& t,const int& cur,bool* vis,int depth,vector<int>& t_depth,map<int, int>& fr) {
for (vector<int>::const_iterator i=t[cur].begin(); i!=t[cur].end(); ++i)
if (!vis[*i]) {
fr[*i]=path.size();
path.push_back(*i);
t_depth.push_back(depth+);
vis[*i]=;
get_path(path,t,*i,vis,depth+,t_depth,fr);
path.push_back(cur);
t_depth.push_back(depth);
vis[*i]=;
}
return;
} inline void swap(int& a,int& b) {
int c=a;
a=b;
b=c;
} class rmq {
private:
vector<vector<int> > f;
void ini(const vector<int>&,const int&,const int&);
int get_min(const int & a,const int& b) {
return a<b?a:b;
}
public:
rmq(const vector<int>& depth) {
int n=depth.size();
if (n>) {
int k=,temp=n-;
while (temp!=) {
++k;
temp>>=;
}
f=vector<vector<int> >(n,vector<int>(k+));
ini(depth,n,k);
}
}
int query(const int& l,const int& r); }; void rmq::ini(const vector<int>& depth,const int& n,const int& k) {
for (int i=; i<n; ++i)
f[i][]=depth[i];
for (int j=; j<=k; ++j)
for (int i=; i<n; ++i)
if ((i+(<<j-))<n)
f[i][j]=get_min(f[i][j-],f[i+(<<(j-))][j-]);
} int rmq::query(const int& l,const int& r) { if (l==r)
return f[l][]; int temp=r-l,k=;
while (temp!=) {
temp>>=;
++k;
}
return get_min(f[l][k-],f[r+-(<<(k-))][k-]);
} int main() {
int n,m;
scanf("%d%d",&n,&m);
vv t(n+,vector<int>());
for (int i=; i<n-; ++i) {
int a,b;
scanf("%d%d",&a,&b);
t[a].push_back(b);
t[b].push_back(a);
}
vector<int> path(,),t_depth(,);
bool* vis=new bool[n+];
memset(vis,,n+);
vis[]=;
map<int, int> fr;
fr[]=;
get_path(path,t,,vis,,t_depth,fr);
rmq RMQ(t_depth);
for (int i=; i<m; ++i) {
int a,b;
scanf("%d%d",&a,&b);
int low=fr[a],high=fr[b];
if (low>high)swap(low,high);
int min=RMQ.query(low,high);
printf("%d\n",t_depth[fr[a]]-min+t_depth[fr[b]]-min);
}
return ;
}

树(tree2)

【题目描述】

方方方种下了三棵树,两年后,第二棵树长出了n个节点,其中1号节点是根节点。

方方方进行m次操作,每个操作为:

(1)给出两个数i,x,将第i个节点的子树中,与i距离为斐波那契数的节点权值+x(包括i本身)。

(2)给出一个数i,求出第i个节点的子树中,与i距离为斐波那契数的节点的权值和(包括i本身)。

【读入数据】

第一行两个整数n,m。接下来n-1行每行两个整数a,b表示一条边。接下来m行每行第一个数表示操作类型,接下来1或2个数表示i (,x)。

【读出数据】

对于每个(2)操作,输出一行一个整数表示答案。

【样例输入】

5 3

1 2

2 3

3 4

4 5

1 1 1

1 2 2

2 4

【样例输出】

1

【数据范围】

对于30%的数据,n,m<=1000。

对于100%的数据,n,m<=100000,|x|<=10^9。



树(tree3)

【题目描述】

方方方种下了三棵树,两年后,第二棵树长出了n个节点,其中1号节点是根节点。

方方方使用魔法为每个节点按以下规则染色:

(1) 每个节点为红色,黑色或白色。

(2) 对于每个叶节点i,有ri,bi,wi三个参数,满足ri+bi+wi=1。方方方分别以ri,bi,wi的概率给i染上红色,黑色和白色。

(3) 对于每个非叶节点,设它的子树大小为x,当它的子树中的其它x-1个节点都被染色后,对它进行染色。假设这x-1个节点分别有r,b,w个红色、黑色和白色,那么它被染成红色、黑色、白色的概率分别为r/(x-1),b/(x-1),w/(x-1)。

染色结束后,方方方按以下规则计算这棵树的魔法值:

(1) 对于每个有序点对(i,j),如果它们的颜色集合为{红色,黑色}且i是j的祖先,魔法值+rb。

(2) 对于每个有序点对(i,j),如果它们的颜色集合为{红色,白色}且i是j的祖先,魔法值+rw。

(3) 对于每个有序点对(i,j),如果它们的颜色集合为{黑色,白色}且i是j的祖先,魔法值+bw。

你需要求出魔法值的期望对998244353取模的结果。

【读入数据】

第一行四个整数n,rb,rw,bw,接下来n-1行每行两个整数a,b表示一条边。接下来n行每行三个整数ri,bi,wi,如果i是叶子节点,保证ri+bi+wi=1,否则ri=bi=wi=0。

【读出数据】

输出魔法值的期望对998244353取模的结果。

【样例读入】

2 1 2 3

1 2

1 0 0

499122177 499122177 0

【样例输出】

499122177

【数据范围】

对于10%的数据,n<=10。

对于30%的数据,n<=50。

对于另外20%的数据,rb=rw=bw。

对于再另外20%的数据,每个叶子节点i满足ri=bi=wi。

对于100%的数据,n<=1000,0<=rb,rw,bw,ri,bi,wi<998244353。


套题T5//各种树的更多相关文章

  1. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  2. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  3. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  4. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  5. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  6. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  7. 套题 codeforces 360

    A题:Opponents 直接模拟 #include <bits/stdc++.h> using namespace std; ]; int main() { int n,k; while ...

  8. 套题 codeforces 359

    A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...

  9. 套题 bestcoder 84

    A题:Aaronson 静下心来观察就会发现1.如果m大于等于n的位数,那么n直接写成二进制形式就是最优解形式2.如果m小于n的位数,那么贪心地使得高位尽可能地多消掉n的值,因为高位少写一个数就意味着 ...

随机推荐

  1. yum被锁定

    使用Yum的时候 提示yum被搜定了 . Another app is currently holding the yum lock; waiting for it to exit...   解决办法 ...

  2. Scrapy源码学习(一)

    用Scrapy已经有一段时间了,觉得该是看一下源码的时候了.最开始用的时候还是0.16的版本,现在稳定版已经到了0.18.结合使用Scrapy的过程,先从Scrapy的命令行看起. 一.准备 下载源代 ...

  3. localStorage变更事件当前页响应新解

    html5的localStorage相信大家都是很熟悉了,但是在chrome等支持该对象的浏览器中(ie10除外),如果你监听 storage变更事件你就会发现,当数据发生变化时本页是监听不到stor ...

  4. 微信/QQ机器人的实现

    介绍: Mojo-Webqq和Mojo-Weixin是在github上基于webQQ和网页版WeiXin,用Perl语言实现的开源的客户端框架,它通过插件提供基于HTTP协议的api接口供其他语言或系 ...

  5. Jquery post 传递数组给asp.net mvc方法

    以批量删除数据为例  做批量删除会需要传递要删除的数据ID数组 function RemoveLog(){ var postModel=[]; //遍历复选框获取要删除的数据ID 存放到数组中  $( ...

  6. VS2013中设置大小写的快捷键

    1.我们在定义头文件时,通常需要定义: #ifndef  _MainMenu_H_#define  _MainMenu_H_ your code... #endif 我们需要将头文件名设置为大写的: ...

  7. highCharts 电流表、电压表

    var highChartsSettingV = { chart: { margin: [5, 2, 5, 8], type: 'gauge', plotBorderWidth: 1, plotBac ...

  8. beego 0.9.0 中智能路由AutoRouter的使用方法及源码解读

    了解beego的开发者肯定知道,beego的路由设计来源于sinatra,原来是不支持自动路由的,每一个路由都要自己配置的,如: type MainController struct { beego. ...

  9. NopCommerce——源代码的组织,以及系统的架构

    近来使用NopCommerce进行开发,仿照源码的Demo也能做出看上去还蛮高端大气上档次的系统出来,现下准备深入学习学习.首先从官方的Documentation开始看起,先来一篇官网文章的翻译(园里 ...

  10. MySQL数据库双机热备份

    MySQL数据库双机热备份 1.mysql 数据库没有增量备份的机制 当数据量太大的时候备份是一个很大的问题.还好 mysql 数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备 ...