传送门

线段树合并菜题。

题意简述:给一棵树,每个节点有bib_ibi​个aia_iai​民族的人,问对于每棵子树,子树中哪个民族的人最多,有多少人。


思路:

直接上线段树合并,边合并边维护答案即可。

为了代码方便可以用pairpairpair来维护答案。

代码:

#include<bits/stdc++.h>
#define ri register int
#define lc (son[p][0])
#define rc (son[p][1])
#define fi first
#define se second
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=4e5+5;
typedef pair<int,int> pii;
vector<int>e[N];
int n,m,tot=0,son[N*30][2],rt[N];
pii mx[N*30],ans[N];
inline void build(int&p,int l,int r,int k,int v){
	mx[p=++tot]=pii(v,-k),lc=rc=0;
	if(l==r)return;
	int mid=l+r>>1;
	k<=mid?build(lc,l,mid,k,v):build(rc,mid+1,r,k,v);
}
inline int merge(int x,int y,int l,int r){
	if(!x||!y)return x^y;
	if(mx[x].se^mx[y].se)mx[x]=max(mx[x],mx[y]);
	else mx[x]=pii(mx[x].fi+mx[y].fi,mx[x].se);
	if(l==r)return x;
	int mid=l+r>>1;
	son[x][0]=merge(son[x][0],son[y][0],l,mid);
	son[x][1]=merge(son[x][1],son[y][1],mid+1,r);
	return mx[x]=max(mx[son[x][0]],mx[son[x][1]]),x;
}
void dfs(int p,int fa){
	for(ri i=0,v;i<e[p].size();++i)if((v=e[p][i])^fa)dfs(v,p),rt[p]=merge(rt[p],rt[v],1,m);
	ans[p]=mx[rt[p]];
}
int main(){
	n=read(),m=read();
	for(ri i=1,u,v;i<n;++i)u=read(),v=read(),e[u].push_back(v),e[v].push_back(u);
	for(ri i=1,a,b;i<=n;++i)a=read(),b=read(),build(rt[i],1,m,a,b);
	dfs(1,0);
	for(ri i=1;i<=n;++i)cout<<-ans[i].se<<' '<<ans[i].fi<<'\n';
	return 0;
}

最新文章

  1. Git-TortoiseGit完整配置流程
  2. HTML5小游戏之见缝插针
  3. Navicat安装详解
  4. JAVA09异常处理之动手动脑问题
  5. js或者ext js获取返回值
  6. SQL查询符合条件的记录的总数
  7. System V IPC(2)-信号量
  8. MFC六大核心机制之一:MFC程序的初始化
  9. 关于C++和C#类型比较的相关内容
  10. jquery特效 幻灯片效果
  11. bzoj 3566: [SHOI2014]概率充电器
  12. Android使用HttpUrlConnection请求服务器发送数据详解
  13. 十行代码分清Java 的 || 和 &amp;&amp;
  14. 2018-2019-2 20165221『网络对抗技术』Exp4:恶意代码分析
  15. C\C++ 内存对齐现象
  16. arcgis 获得工具箱工具的个数
  17. iOS多线程编程之线程间的通信(转载)
  18. JavaWEB SSH文件上传
  19. Python全栈开发:list、元祖常用方法操作
  20. 三十分钟理解计算图上的微积分:Backpropagation,反向微分

热门文章

  1. linux 切割文件的命令
  2. DDMS 使用方法
  3. C++旅馆问题。
  4. mysql之 安装(Mac)
  5. 高盛昂赛 算法题先写corner case
  6. xss测试用例
  7. first H5
  8. WEB框架Django之中间件/缓存/CBV/信号
  9. springboot报错Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
  10. Win7 64位VC6调试无法退出