套题T5//各种树
树(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
最小值是__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//各种树的更多相关文章
- 第46套题【STL】【贪心】【递推】【BFS 图】
已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...
- Educational Codeforces Round 15 套题
这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告
写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...
- Tarjan & LCA 套题题目题解
刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...
- 套题 codeforces 361
A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...
- 套题 codeforces 360
A题:Opponents 直接模拟 #include <bits/stdc++.h> using namespace std; ]; int main() { int n,k; while ...
- 套题 codeforces 359
A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...
- 套题 bestcoder 84
A题:Aaronson 静下心来观察就会发现1.如果m大于等于n的位数,那么n直接写成二进制形式就是最优解形式2.如果m小于n的位数,那么贪心地使得高位尽可能地多消掉n的值,因为高位少写一个数就意味着 ...
随机推荐
- WPF 类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义。
问题:类型“System.ComponentModel.ISupportInitialize”在未被引用的程序集中定义.必须添加对程序集“System, Version=4.0.0.0, Cultur ...
- WPF 绑定五(本身就是数据源)
xaml: <Window x:Class="WpfApplication1.Window5" xmlns="http://schemas.microsoft.co ...
- Android:自定义控件样式(Selector)
前言 在开发一个应用程序过程中不可避免的要去修改组件的样式,比如按钮.输入框等.现在就看下如何通过Seletor实现样式的自定义.先看下简单的效果对比
- 使用socket.io搭建聊天室
最近在学习nodejs,需要找一些项目练练手.找来找去发现了一个聊天室的教程,足够简单,也能从中学到一些东西.下面记录我练习过程中待一些笔记. nodeJS模块 共用到了2个模块,express和so ...
- laravel--为什么属性在模型中没有定义,却取出来了值,这些属性哪里来的
看laravel模型中的这段代码, public function getLimitUsersAttribute() { return $this->user_limit - $this-> ...
- php随机验证码
今天同学问我,用php怎么写验证码,由于是新手所以花了半天的时间才完成.而且功能很是简单呵呵.今天本来打算写session和cookie的看来是要明天了. <?php $image_width= ...
- 为checkboxSelectionModel赋值
store.on('load', function(store, records, options) { sm.clearSelections(); //清空数据 Ext.each(records ...
- 【面试虐菜】—— Jboss调优
吐血整理了以前Jboss以及JVM在生产环境下的调优参数,各种不同的案例,都是来自网友杜撰.整合后,希望对广大使用jboss作为生产应用服务器的朋友有所帮助. JBOSS参数调优 配置deploy/j ...
- WPF之UseLayoutRounding和SnapsToDevicePixels
最近在工作中看别的朋友XML代码时,发现SnapsToDevicePixels 属性然后通过查询资料了解其作用 1)UserLayoutRounding为False,导致控件布局相对屏幕若不是整数则不 ...
- RDD的转换操作---RDD转换过程
1) union(otherRDD)RDD-->UnionRDD2) groupByKey(numPartitions)RDD-->ShuffledRDD-->MapPartitio ...