【启发式合并】【dfs】树数树(nowcoder 20107-C)

正题

nowcoder 20107-C


题目大意

给一棵树,让你构造一个序列a,使得a中的数互不相等,且相邻点是祖先的关系,回答序列最长长度


解题思路

书中的每个点可以把字数的两个序列连起来

考虑维护一个堆,存子树中的序列,每次从子树中找两个最大的序列,然后合并起来,其他的上传到当前堆,这里合并堆可以用启发式合并


code

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 100100
#define ll long long
using namespace std;
int T,n,x,y,tot,h[N],hs[N],sz[N],to[N];
priority_queue<int>d[N];
struct rec
{int to,nx;
}e[N<<1];
void add(int x,int y)
{e[++tot].to=y;e[tot].nx=h[x];h[x]=tot;return;
}
void dfs(int x,int fa)
{hs[x]=0;sz[x]=1;for(int i=h[x];i;i=e[i].nx){int y=e[i].to;if(y==fa)continue;dfs(y,x);sz[x]+=sz[y];if(sz[y]>sz[hs[x]])hs[x]=y;}if(hs[x])to[x]=to[hs[x]];for(int i=h[x];i;i=e[i].nx){int y=e[i].to;if(y==fa||y==hs[x])continue;while(!d[to[y]].empty())d[to[x]].push(d[to[y]].top()),d[to[y]].pop();//上传}if(d[to[x]].size()>=2){int g1=d[to[x]].top();//找最大的两个d[to[x]].pop();int g2=d[to[x]].top();d[to[x]].pop();d[to[x]].push(g1+g2+1);}else if(d[to[x]].size()>=1){int g1=d[to[x]].top();d[to[x]].pop();d[to[x]].push(g1+1);}else d[to[x]].push(1);return;
}
int main()
{scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;++i)to[i]=i;tot=0;memset(h,0,sizeof(h));for(int i=1;i<n;++i){scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(1,0);printf("%d\n",d[to[1]].top());for(int i=1;i<=n;++i)while(!d[to[i]].empty())d[to[i]].pop();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF848E-Days of Floral Colours【dp,分治NTT】

正题 题目链接:https://www.luogu.com.cn/problem/CF848E 题目大意 2n2n2n个花排成一个圆环&#xff0c;nnn种颜色每种两个&#xff0c;要求两个相同颜色之间最小距离为1,21,21,2或nnn。 对于一种染色方案的权值为&#xff1a;删除掉距离为nnn的颜色后&#xff0c;剩下的连续…

2020 China Collegiate Programming Contest Qinhuangdao Site 补题部分

已经补AEFGK E. Exam Results 枚举二分动态开点权值线段树O(nlogN)O(nlogN)O(nlogN) 智商太低&#xff0c;想不到什么贪心只能暴力数据结构维护 对于所有学生的最高成绩只可能是ai(1≤i≤n)a_i(1\leq i\leq n)ai​(1≤i≤n)或者最大的bib_ibi​&#xff0c;对于后面一种情况…

CCPC Training Class

杭电oj 题意&#xff1a; 字符串中出现次数最多的字母的次数是多少&#xff1f; 题解&#xff1a; 题目看不懂。。。又臭又长 懒得看。。 但是仔细看样例就会发现。。其实考的很简单 比赛时这题是我做的&#xff0c;以下为考试原码 代码&#xff1a; #include<string&…

【交互】Omkar and the Meaning of Life(CF-1586D)

正题 CF-1586D 题目大意 有一个大小为n的数列a&#xff0c;你可以进行最多2*n次查询 对于每次查询&#xff0c;你要给出一个大小为n的数列b&#xff0c;ciaibic_ia_ib_ici​ai​bi​&#xff0c;题目会回答c中出现次数大于2的数的最早出现位置 现在让你得出a数组 解题思路 …

ASP.NET Core 集成测试中结合 WebApplicationFactory 使用 SQLite 内存数据库

SQLite 内存数据库&#xff08;in-memory database&#xff09;的连接字符串是 Data Source:memory: &#xff0c;它的特点是数据库连接一关闭&#xff0c;数据库就会被删除。而使用 services.AddDbContext 通过连接字符串配置 EF Core 时&#xff0c;EF Core 会在每次查询或…

P4389-付公主的背包【生成函数,多项式exp】

正题 题目链接:https://www.luogu.com.cn/problem/P4389 题目大意 nnn种物品&#xff0c;第iii种大小为viv_ivi​&#xff0c;数量无限。对于每个s∈[1,m]s\in[1,m]s∈[1,m]求刚好填满sss容量的方案数。 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 统计和为一定值的…

mex性质学习

E.Complicated Computations 如果一个区间的mexamexamexa&#xff0c;满足以下条件&#xff1a; 区间未出现aaa区间出现1→a−11\to a-11→a−1 因此若考虑是否存在一个区间的mex值是aaa&#xff0c;我们尝试把整个区间以aaa为端点划分成若干段&#xff0c;只要每一段内&…

Cows

题目 题意: 有一群牛&#xff0c;每个牛有两个属性值[S,E]&#xff0c;如果牛i和牛j属性值满足Si < Sj 且 Ej < Ei 且 Ei - Si > Ej - Sj&#xff0c;牛i比牛j强壮&#xff0c;输出每个牛比自己强壮的牛的数量。 题解&#xff1a; 我们可以把[S,E]看作坐标&#x…

【SAM】差异(P4248)

正题 P4248 题目大意 设TiT_iTi​为第i个字符开始的后缀&#xff0c;求&#xff1a; ∑i1n∑ji1nlen(Ti)len(Tj)−2lcp(Ti,Tj)\sum_{i1}^n \sum_{ji1}^n len(T_i)len(T_j)-2\times lcp(T_i,T_j)i1∑n​ji1∑n​len(Ti​)len(Tj​)−2lcp(Ti​,Tj​) 解题思路 用SAM建立paren…

P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】

正题 题目链接:https://www.luogu.com.cn/problem/P4345 题目大意 TTT组询问&#xff0c;给出n,kn,kn,k求 ∑i0k(ni)\sum_{i0}^{k}\binom{n}{i}i0∑k​(in​) 对233323332333取模的值 1≤T≤105,1≤k≤n≤10181\leq T\leq 10^5,1\leq k\leq n\leq 10^{18}1≤T≤105,1≤k≤n≤1…

AServer - 基于Asp.net core Kestrel的超迷你http服务器

AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里&#xff0c;用来快速的响应Http请求&#xff0c;而不需要集成整个ASP.NET Core MVC 框架。一&#xff1a;什么是ASever&#xff1f;AServer就像它的名字一样&#xff0c;Just a serv…

特征根是复数的二阶微分方程

考虑如下微分方程d2ydx2a1dydxa2x0\frac{d^2y}{dx^2}a_1\frac{dy}{dx}a_2x0dx2d2y​a1​dxdy​a2​x0 众所周知&#xff0c;一般求得二阶常系数线性微分方程的通常由以下步骤 根据微分方程写出它的特征方程λ2a1λa20\lambda^2a_1\lambdaa_20λ2a1​λa2​0求解特征方程的两个…

Buy and Resell 2018中国大学生程序设计竞赛 - 网络选拔赛

题目 题意&#xff1a; n个宝石&#xff0c;宝石的买入或卖出价格固定&#xff0c;一天只能到一个珠宝商店&#xff08;从左到右&#xff09;&#xff0c;问最大利润是多少&#xff1f;在保证最大利润的同时最少交换次数是多少&#xff1f; 题解&#xff1a; 题目有两问&am…

基于Service fabric + Ocelot + Identity Server4 + 52ABP 的案例展示

10.24-27 大会Microsoft Tech Summit 2018 在上海举办&#xff0c;我 有幸受邀成为这场大会的讲师。Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行&#xff0c;这也会是国内举办的最后一届 Tech Summit&#xff0c;2019 年开始会以 Micr…

【网络流】植物大战僵尸(P2805)

正题 P2805 题目大意 在一个nmn\times mnm的平面上有若干植物&#xff0c;每个植物有其攻击集合&#xff0c;吃掉一个植物要先吃掉该植物右边的所有植物&#xff0c;且该植物不能在任何一个植物的攻击集合内&#xff0c;吃掉后有贡献ai,ja_{i,j}ai,j​&#xff0c;问你最大贡…

YbtOJ#763-攻城略池【线段树合并】

正题 题目链接:http://www.ybtoj.com.cn/problem/763 题目大意 给出nnn个点的一棵树&#xff0c;每个di0d_i0di​0的点每秒会产生一个士兵往根节点走&#xff0c;走到一个节点让一个节点did_idi​减一&#xff08;为000就不管&#xff09;。 求需要多久才能让所有点的ddd值变…

ARC106——E - Medals

E - Medals 首先看到这题看不出是一个匹配的题大佬题解 把每一个工人和每一天看成一个二分图&#xff0c;如果某个工人在某天工作&#xff0c;那么两者存在边&#xff0c;现在问题转化成至少需要多少天&#xff0c;能够把nnn个工人全部匹配kkk次 显然天数可以二分&#xff0…

2020 CCPC网络赛 赛后感

第一次参加&#xff0c;做过去年19年网络赛的题&#xff0c;去年是四个水题稳做出&#xff0c;然后还有两个线段树和树状数组的题&#xff08;好像是&#xff09;&#xff0c;所以本来对这次网络赛挺有信心的&#xff08;去年好像四个题就能进,当然要手速快&#xff09;。 这次…

Feature Flag 功能发布控制

背景产品在新功能发布前&#xff0c;可能会采取小流量测试的方式&#xff0c;或者在确定方案前使用A/B测试来衡量。一般开发人员会跟运维同学合作&#xff0c;通过一些现有平台切换机器或者流量来实现。本文介绍了另外一种简便的方式&#xff0c;并解释了其在持续集成上的应用&…

P4542-[ZJOI2011]营救皮卡丘【费用流,Floyd】

正题 题目链接:https://www.luogu.com.cn/problem/P4542 题目大意 给出n1n1n1个点mmm条边的无向图&#xff0c;kkk个人开始在000号点&#xff0c;一个人进入iii号点之前必须要有人经过i−1i-1i−1号点&#xff0c;求第一个人进入nnn号点时所有人的最短移动距离和。 1≤n≤150…