题解

首先有一个性质:对于一个点,它的独特点都会分布在(它到整棵树的两个直径端点中较远的那一个端点的路径)上

我们如果以当前点为根,那么下面的那一部分直径就会消除上面的那一部分的直径的部分独特点

注意,如果设转轴为O,那么点O对于点x依然是独特的

当然,直径上还会有一些支链,它们也会消除一部分独特点

为什么不用考虑下面的直径上的支链?

因为下半部分的支链长度是小于等于下半部分的直径长度的(否则就矛盾了)

所以我们可以直接用下半部分的直径来代替它们了

至于如何维护消除操作

我们可以用一个栈和一个桶来简单维护

但是如果我们要计算的点在支链上,且支链上还有支链来影响答案那该怎么办?

这个时候我们就可以借助长链剖分

把父亲长链的栈继承下来

再用递归调用一下solve就可以了

注意,父亲长链的点O必须在每一次递归调用的时候都要存在于栈内

因为有可能会被弹出,这样在下一个儿子就可能统计不到点O

(当然,为了好举例,这里没有画出下面的长链的消除影响)

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int gi()
{char c;int num=0,flg=1;while((c=getchar())<'0'||c>'9')if(c=='-')flg=-1;while(c>='0'&&c<='9'){num=num*10+c-48;c=getchar();}return num*flg;
}
#define N 200005
int rt;
int fir[N],nxt[2*N],to[2*N],cnt;
int ans[N],dep[N],mxd[N],son[N];
int a[N],b[N],sum,stk[N],top;
void adde(int a,int b){to[++cnt]=b;nxt[cnt]=fir[a];fir[a]=cnt;}
void dfs1(int u,int fa,int &g)
{if((dep[u]=dep[fa]+1)>dep[g]) g=u;for(int v,p=fir[u];p;p=nxt[p]){if((v=to[p])!=fa){dep[v]=dep[u]+1;dfs1(v,u,g);}}
}
void dfs2(int u,int fa)
{dep[u]=dep[fa]+1;son[u]=mxd[u]=0;for(int v,p=fir[u];p;p=nxt[p]){if((v=to[p])!=fa){dfs2(v,u);if(mxd[v]+1>mxd[u]){mxd[u]=mxd[v]+1;son[u]=v;}}}
}
void Push(int x){stk[++top]=x;if(!b[a[x]]++)sum++;}
void Pop(){if(!--b[a[stk[top--]]])sum--;}
void solve(int u,int fa)
{if(son[u]){int sec=0;for(int v,p=fir[u];p;p=nxt[p])if((v=to[p])!=son[u]&&v!=fa)sec=max(sec,mxd[v]+1);while(top&&dep[stk[top]]>=dep[u]-sec)Pop();Push(u);solve(son[u],u);}while(top&&dep[stk[top]]>=dep[u]-mxd[u])Pop();ans[u]=max(ans[u],sum);for(int v,p=fir[u];p;p=nxt[p]){if((v=to[p])!=son[u]&&v!=fa){if(stk[top]!=u)Push(u);solve(v,u);}}if(stk[top]==u)Pop();
}
int main()
{freopen("star.in","r",stdin);freopen("star.out","w",stdout);int n,m,i,u,v;n=gi();m=gi();for(i=1;i<n;i++){u=gi();v=gi();adde(u,v);adde(v,u);}for(int i=1;i<=n;i++)a[i]=gi();dfs1(1,0,rt);dfs2(rt,0);solve(rt,0);dfs1(rt,0,rt);dfs2(rt,0);solve(rt,0);for(i=1;i<=n;i++)printf("%d\n",ans[i]);
}

再补一个std题解:

20200226省选模拟赛(by Tiw) T1 客星(长链剖分)相关推荐

  1. 省选模拟赛记录(越往下越新哦~~~)

    LOG 模拟赛 第一次见尼玛这么给数据范围的-- 开考有点困,迷迷糊糊看完了三道题,真的是像老吕说的那样,一道都不会-- 思考T1,感觉有点感觉,但是太困了,就先码了暴力,发现打表可以50分,于是就大 ...

  2. 省选模拟赛2022/3/23

    省选模拟赛2022/3/23 比赛时间安排 赛后总结反思 与正解的差距 T1 T2 T3 比赛时间安排 7.30-7.40 t1 n<=10,全排列一下跳叶子结点的顺序暴力搞 t2 题意感觉好复 ...

  3. 省选模拟赛2022/3/31

    省选模拟赛2022/3/31 比赛时间安排 赛后反思总结 与正解的差距 T3 比赛时间安排 7.50-8.10 t1 暴力复杂度都很大啊,完全没想法 t2 dfs可以试一试,但是感觉复杂度还是会炸,想 ...

  4. 省选模拟赛(正睿的最后一场)

    省选模拟赛(正睿的最后一场!!) 比赛时间安排 与正解的差距 T1 比赛时间安排 7.30-7.40 t1 能拿10分dfs,n=0的情况或许可以找规律 t2 看不懂 t3 暴力挺好写的,求lca太麻 ...

  5. FCS省选模拟赛 Day7

    Description Solution T1 island 考虑把问题成两部分计算 纵坐标的距离和很好计算,在输入的同时一次计算了就完事 横坐标又分成两部分 分别在\(y\)轴不同侧的矩形的距离和同 ...

  6. NOI2019省选模拟赛 第五场

    爆炸了QAQ 传送门 \(A\) \(Mas\)的童年 这题我怎么感觉好像做过--我记得那个时候还因为没有取\(min\)结果\(100\to 0\)-- 因为是个异或我们肯定得按位考虑贡献了 把\( ...

  7. 20200515省选模拟赛B、幻化成风(毒瘤容斥题+构造容斥系数+生成函数+hash状压DP+Trie树优化背包)

    题解 花了一上午+一中午终于把这道题A了 首先,我们要求的是bi互不相同的合法方案数 我们可以枚举一个a的集合S,来强制里面的b全部都相同,然后其它的随便放 由于这个题的n的约数非常多,我们可以把它质 ...

  8. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  9. NOI2019省选模拟赛 第三场

    传送门 明明没参加过却因为点进去结果狂掉\(rating\)-- \(A\) 集合 如果我们记 \[f_k=\sum_{i=1}^nT^i{n-i\choose k}\] 那么答案显然就是\(f_{k ...

最新文章

  1. 新品【国内动态】服务器列表
  2. 每日一皮:据说现在小孩从小容易生病、体质不如从前是因为少了这个运动......
  3. MySQL--3--mysqldump备份策略
  4. java 写文件时,输入换行字符.
  5. 如何利用工业大数据降本增效
  6. .Net_asp.net页面的生命周期
  7. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_7 Mybatis中使用代理Dao的执行过程分析...
  8. mysql动态代理_动态代理连接数据库
  9. 计算机博士专业学位,计算机博士
  10. Apache+PHP+VC14环境搭建及测试
  11. 工学结合2019/9/17
  12. 开发之准备:为目标设备创建映像
  13. 测试人员应看重「业务测试能力」
  14. CCF关于NOIP2018获奖证书发放的公告
  15. ubutnu18+cuda11.1+cudnn8.0.4+nvidia-driver-465
  16. web安全攻防学习之1-渗透测试信息收集
  17. iOS WebDriverAgent 环境搭建
  18. win7扫描仪在计算机,怎么在win7我的电脑里显示hp1005扫描仪图标
  19. live555 学习笔记-建立RTSP连接的过程(RTSP服务器端)
  20. 关于P10的‘前’置指纹猜想——写在P10发布‘前’

热门文章

  1. 华为最新智能服务器,曝光:华为最新一代FusionServer Pro 2488H V6智能服务器
  2. fiddler抓取手机app数据(手机开热点)
  3. harmonyOS系统是安卓,HarmonyOS华为操作系统
  4. java 压缩图片至指定大小
  5. mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object完美解决方案
  6. MATLAB | 中秋节 · 绘制《山间秋月》及《皓月当空》
  7. 基于嵌入式Linux的无线路由器设计——Bridged Adapter网桥模式
  8. 简单的Django系统模板
  9. Spark运行环境之SparkEnv和通信工具RpcEnv
  10. 华为手机录屏大师录制的视频在本地目录找不到无法转移到PC的问题解决方案——免费转移视频