Codeforces ECR47F Dominant Indices(线段树合并)
一个比较显然的做法:对每棵子树用线段树维护其中的深度,线段树合并即可。
本来想用这个题学一下dsu on tree,结果还是弃疗了。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 1000010
int n,p[N],root[N],deep[N],ans[N],t=,cnt=;
struct data{int to,nxt;
}edge[N<<];
struct data2{int l,r,x,s;
}tree[N*];
void addedge(int x,int y){t++;edge[t].to=y,edge[t].nxt=p[x],p[x]=t;}
void up(int k)
{
if (tree[tree[k].l].s>=tree[tree[k].r].s)
tree[k].s=tree[tree[k].l].s,tree[k].x=tree[tree[k].l].x;
else tree[k].s=tree[tree[k].r].s,tree[k].x=tree[tree[k].r].x;
}
int merge(int x,int y,int l,int r)
{
if (!x||!y) return x|y;
if (l==r) tree[x].s+=tree[y].s;
else
{
int mid=l+r>>;
tree[x].l=merge(tree[x].l,tree[y].l,l,mid);
tree[x].r=merge(tree[x].r,tree[y].r,mid+,r);
up(x);
}
return x;
}
void ins(int &k,int x,int l,int r)
{
if (!k) k=++cnt;
if (l==r) {tree[k].s++,tree[k].x=x;return;}
int mid=l+r>>;
if (x<=mid) ins(tree[k].l,x,l,mid);
else ins(tree[k].r,x,mid+,r);
up(k);
}
void dfs(int k,int from)
{
for (int i=p[k];i;i=edge[i].nxt)
if (edge[i].to!=from)
{
deep[edge[i].to]=deep[k]+;
dfs(edge[i].to,k);
root[k]=merge(root[k],root[edge[i].to],,n);
}
ins(root[k],deep[k],,n);
ans[k]=tree[root[k]].x-deep[k];
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("dsu.in","r",stdin);
freopen("dsu.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read();
for (int i=;i<n;i++)
{
int x=read(),y=read();
addedge(x,y),addedge(y,x);
}
deep[]=;dfs(,);
for (int i=;i<=n;i++) printf("%d\n",ans[i]);
return ;
}
Codeforces ECR47F Dominant Indices(线段树合并)的更多相关文章
- Educational Codeforces Round 47 (Rated for Div. 2)F. Dominant Indices 线段树合并
		
题意:有一棵树,对于每个点求子树中离他深度最多的深度是多少, 题解:线段树合并快如闪电,每个节点开一个权值线段树,递归时合并即可,然后维护区间最多的是哪个权值,到x的深度就是到根的深度减去x到根的深度 ...
 - codeforces 600E . Lomsat gelral  (线段树合并)
		
You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...
 - codeforces 893F - Physical Education Lessons 动态开点线段树合并
		
https://codeforces.com/contest/893/problem/F 题意: 给一个有根树, 多次查询,每次查询对于$x$i点的子树中,距离$x$小于等于$k$的所有点中权值最小的 ...
 - Codeforces 671D Roads in Yusland [树形DP,线段树合并]
		
洛谷 Codeforces 这是一个非正解,被正解暴踩,但它还是过了. 思路 首先很容易想到DP. 设\(dp_{x,i}\)表示\(x\)子树全部被覆盖,而且向上恰好延伸到\(dep=i\)的位置, ...
 - Codeforces 666E Forensic Examination SAM or SA+线段树合并
		
E. Forensic Examination http://codeforces.com/problemset/problem/666/E 题目大意:给模式串S以及m个特殊串,q个询问,询问S的子串 ...
 - codeforces 600E E. Lomsat gelral (线段树合并)
		
codeforces 600E E. Lomsat gelral 传送门:https://codeforces.com/contest/600/problem/E 题意: 给你一颗n个节点的树,树上的 ...
 - 【Codeforces 1037H】Security(SAM & 线段树合并)
		
Description 给出一个字符串 \(S\). 给出 \(Q\) 个操作,给出 \(L, R, T\),求字典序最小的 \(S_1\),使得 \(S^\prime\) 为\(S[L..R]\) ...
 - Codeforces 1276F - Asterisk Substrings(SAM+线段树合并+虚树)
		
Codeforces 题面传送门 & 洛谷题面传送门 SAM hot tea %%%%%%% 首先我们显然可以将所有能够得到的字符串分成六类:\(\varnothing,\text{*},s, ...
 - Codeforces 700E. Cool Slogans  字符串,SAM,线段树合并,动态规划
		
原文链接https://www.cnblogs.com/zhouzhendong/p/CF700E.html 题解 首先建个SAM. 一个结论:对于parent树上任意一个点x,以及它所代表的子树内任 ...
 
随机推荐
- 学习CSS布局 - position
			
position 为了制作更多复杂的布局,我们需要讨论下 position 属性. 它有一大堆的值,名字还都特抽象,别提有多难记了. 让我们先一个个的过一遍,不过你最好还是把这页放到书签里. 先看下运 ...
 - C++11 并发指南四(<future> 详解一 std::promise 介绍)
			
前面两讲<C++11 并发指南二(std::thread 详解)>,<C++11 并发指南三(std::mutex 详解)>分别介绍了 std::thread 和 std::m ...
 - Luogu2164 SHOI2007 交通网络 期望、BFS、拓扑排序
			
传送门 题目还算不难吧 首先我们枚举点$i$,将其他所有点到这个点的最短路求出来 然后我们在这一次建出的最短路$DAG$的反图上进行拓扑排序.假设我们算到了点$j$,点$j$的人流量为$t_j$,点$ ...
 - 简单的策略模式Strategy演示
			
策略模式,即规则在变化之中,结果终归为一. 公司给员工计算工资,如有加班费,差旅费,每个月的生活补帖等等其它费用需要计算.这个费的规则是不尽相同. 不管策略的规则怎样,终归需要计算出一个结果 工资: ...
 - Nginx Windows版的服务安装和管理工具
			
以前研究过负载均衡,最近正在项目上实施(从来没做过小项目以上级别的东西,哈),nginx挺好,不过Windows有点为难,小流量和本地不追求性能,简单易用是目标. Nginx Windows上并没有提 ...
 - mysql下批量清空某个库下的所有表(库不要删除,保留空库)
			
总所周知,mysql下要想删除某个库下的某张表,只需要切换到该库下,执行语句"drop table tablename"即可删除!但若是该库下有成百上千张表,要是再这样一次次执行d ...
 - poj1426   Find The Multiple(c语言巧解)
			
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36335 Accepted: 151 ...
 - Microsoft Visual Studio2013安装及单元测试
			
和大家分享一下我安装VS2013和单元测试的过程.VS是微软多种编程软件的集合,功能与工作环境更全面,相比VC++6.0来说是一个很大的提升. VS安装: VS的安装和普通软件相同,只是花费的时间很长 ...
 - Opentsdb 启动显示配置文件不存在
			
今天 重新启动opentsdb 出现本地配置文件不存在 这不知道 我查了一下官网 了解到 You can use the --config command line argument to s ...
 - 读<架构漫谈>系列有感
			
读了这一系列博文,我对架构也有了大致的了解.在简单的阅读之后,我解决了几个问题. 第一个问题,什么是架构? 要学习架构,首先要知道架构.那么,什么是架构呢?引用<架构漫谈(一)>里的话就是 ...