博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF 600 E Lomsat gelral —— 树上启发式合并
阅读量:4552 次
发布时间:2019-06-08

本文共 1301 字,大约阅读时间需要 4 分钟。

题目:

看博客:

还是不太明白复杂度...

代码如下:

#include
#include
#include
#include
using namespace std;typedef long long ll;int const xn=1e5+5;int n,c[xn],hd[xn],ct,to[xn<<1],nxt[xn<<1],cnt[xn],siz[xn],son[xn],mx,big;ll ans[xn],sum;void add(int x,int y){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct;}int rd(){ int ret=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=0; ch=getchar();} while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar(); return f?ret:-ret;}void dfs(int x,int fa){ siz[x]=1; for(int i=hd[x],u;i;i=nxt[i]) { if((u=to[i])==fa)continue; dfs(u,x); siz[x]+=siz[u]; if(siz[u]>siz[son[x]])son[x]=u; }}void add(int x,int fa,int v){ cnt[c[x]]+=v; if(cnt[c[x]]>mx)sum=c[x],mx=cnt[c[x]]; else if(cnt[c[x]]==mx)sum+=c[x]; for(int i=hd[x],u;i;i=nxt[i]) if((u=to[i])!=fa&&u!=big)add(u,x,v);}void dfs2(int x,int fa,int keep){ for(int i=hd[x],u;i;i=nxt[i]) if((u=to[i])!=fa&&u!=son[x])dfs2(u,x,0); if(son[x])dfs2(son[x],x,1),big=son[x]; add(x,fa,1); big=0; ans[x]=sum; if(!keep)add(x,fa,-1),mx=sum=0;//=0!}int main(){ n=rd(); for(int i=1;i<=n;i++)c[i]=rd(); for(int i=1,x,y;i

 

转载于:https://www.cnblogs.com/Zinn/p/9688708.html

你可能感兴趣的文章
SimpleDateFormat 线程安全的解决方案--DateTimeFormatter
查看>>
mysql不常用查询
查看>>
win下PowerShell的簡單使用
查看>>
windows下安装redis
查看>>
redis簡單命令
查看>>
git问题记录
查看>>
如何将jar包打包到本地maven仓库
查看>>
idea修改maven项目名
查看>>
idea远程调试tomcat部署项目(windows环境)
查看>>
@Slf4j注解
查看>>
maven仓库镜像、私服与jdk版本配置
查看>>
关于JDBC、JdbcTemplate使用遇到的坑
查看>>
java代码实现数据源切换(连接池简单粗暴)
查看>>
关于tomcat启动错误:At least one JAR was scanned for TLDs yet contained no TLDs
查看>>
mysql自定义函数初始化数据:init_data()
查看>>
关于tomcat报错记录
查看>>
linux(centos 7)安装及使用yum
查看>>
mybatis使用Map<String,Object>映射mysql结果集,关于字段的问题
查看>>
linux上一些常用的命令
查看>>
intellij debug模式提示 Method breakpoints may dramatically slow down debugging
查看>>