CodeForces 1009F Dominant Indices 树上dsu

阅读: 评论:0

CodeForces 1009F Dominant Indices 树上dsu

CodeForces 1009F Dominant Indices 树上dsu

老厉害了,借这道题学习一下树上启发式合并。

#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;int n,sz[1000005],deep[1000005],bc[1000005],mx=0,ans[1000005];
vector<int> vec[1000005];
map<int,int>mp;void dfs1(int u,int fa)
{sz[u]=1;deep[u]=deep[fa]+1;int bctmp=0;for (int i=0; i<vec[u].size(); i++){int v=vec[u][i];if (v==fa) continue;dfs1(v,u);sz[u]+=sz[v];if (!bctmp||sz[bctmp]<sz[v]) bctmp=v;}bc[u]=bctmp;
}void add(int fa,int u)
{//cout<<"!u="<<u<<endl;mp[deep[u]]++;//cout<<"!u="<<u<<" mpdepu="<<mp[deep[u]]<<" mpmx="<<mp[mx]<<endl;if (mp[deep[u]]>mp[mx] || mp[deep[u]]==mp[mx] && deep[u]<mx){mx=deep[u];}for (int i=1; i<=vec[u].size(); i++){int v=vec[u][i];if (v==fa) continue;add(u,v);}//cout<<"!mx="<<mx<<endl;
}void dfs2(int u,int fa)
{for (int i=0; i<vec[u].size(); i++){int v=vec[u][i];if (fa==v) continue;if (v==bc[u]) continue;dfs2(v,u);mp.clear();mx=0;}if (bc[u]) dfs2(bc[u],u);for (int i=0; i<vec[u].size(); i++){int v=vec[u][i];if (fa==v) continue;if (v==bc[u]) continue;add(u,v);}mp[deep[u]]++;//cout<<"u="<<u<<" mpdepu="<<mp[deep[u]]<<" mpmx="<<mp[mx]<<endl;if (mp[deep[u]]>mp[mx] || mp[deep[u]]==mp[mx] && deep[u]<mx){mx=deep[u];}//cout<<"u="<<u<<" mx="<<mx<<endl;ans[u]=mx-deep[u];//cout<<"ans="<<ans[u]<<endl;
}int main()
{scanf("%d",&n);for (int i=1; i<n; i++){int u,v;scanf("%d%d",&u,&v);vec[u].push_back(v);vec[v].push_back(u);}dfs1(1,0);dfs2(1,0);for (int i=1; i<=n; i++){cout<<ans[i]<<endl;}return 0;
}

 

本文发布于:2024-01-31 09:29:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170666455427536.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:树上   CodeForces   Dominant   dsu   Indices
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23