摘要:
问题分析 首先不难想到是虚树。建完虚树需要保持节点间原先的距离关系。 然后总距离和最小距离用树形DP求,最大距离用两遍dfs即可。注意统计的时候只对关键点进行统计。 ~~真是麻烦~~ 参考程序 ~~ac的时候是loj上速度最后一页,代码第四长的……~~ c include using namespa 阅读全文
摘要:
"题目链接" 问题分析 直接按边从小到大加入,求所有的连通点对数量即可。最后离线询问。使用并查集维护Size。 参考程序 c include using namespace std; const int Maxn = 200010; const int MaxAlpha = 200000; stru 阅读全文
摘要:
"题目链接" 问题分析 由于三个字母是等价的,所以大致可以分为如下几种情况: aa, ab ab, ac ab, ba ab, bc 不难发现,第$3$中情况可能造成无解($n 1$时),而剩下的情况都可以由$aaabbbccc$或$abcabcabc$这样的串解决。所以直接枚举$3$个字母的全排列 阅读全文
摘要:
"easy version" "hard version" 问题分析 直接从hard version入手。不难发现从一个数$x$能得到的数个数是$O(\log x)$的。这样总共有$O(n\log n)$个数。然后对每一种数开一个大根堆维护前$k$个就好了。 参考程序 c include using 阅读全文
摘要:
"题目链接" 问题分析 没有想到母函数的做法…… 其实直接看题思路挺简单的。发现如果每种花都有无限多的话,问题变得十分简单,答案就是$s+n 1\choose n 1$。然后发现$n$只有$20$,于是大力容斥一波就完事了。 参考代码 c include const long long Max_n 阅读全文