博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF1009F Dominant Indices
阅读量:4565 次
发布时间:2019-06-08

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

  • 难点在于读懂题面.
  • \(dsu\ on\ tree\), 注意深度是相对深度,记录答案时减去节点本身深度.时间复杂度为 \(O(nlogn)\) .
  • 本题还可以使用达到 \(O(n)\) 的时间复杂度.
#include
using namespace std;#define ll long long#define mp make_pair#define pii pair
inline int read(){ int x=0; bool pos=1; char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch=='-') pos=0; for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0'; return pos?x:-x;}const int MAXN=1e6+10;int n;int ecnt=0,head[MAXN],nx[MAXN<<1],to[MAXN<<1];inline void addedge(int u,int v){ ++ecnt; nx[ecnt]=head[u]; to[ecnt]=v; head[u]=ecnt; swap(u,v); ++ecnt; nx[ecnt]=head[u]; to[ecnt]=v; head[u]=ecnt;}int mxson[MAXN],siz[MAXN],dep[MAXN];int cnt[MAXN],mxcnt,pos,bigson;void getsiz(int u,int fa){ siz[u]=1; dep[u]=dep[fa]+1; for(int i=head[u];i;i=nx[i]) { int v=to[i]; if(v!=fa) { getsiz(v,u); if(siz[v]>siz[mxson[u]]) mxson[u]=v; siz[u]+=siz[v]; } }}int ans[MAXN];void add(int u,int fa,int val){ int s=(cnt[dep[u]]+=val); if(s>mxcnt) mxcnt=s,pos=dep[u]; else if(s==mxcnt) pos=min(pos,dep[u]); for(int i=head[u];i;i=nx[i]) { int v=to[i]; if(v!=fa && v!=bigson) add(v,u,val); }}void dfs(int u,int fa,bool keep){ for(int i=head[u];i;i=nx[i]) { int v=to[i]; if(v!=fa && v!=mxson[u]) dfs(v,u,false); } if(mxson[u]) dfs(mxson[u],u,true),bigson=mxson[u]; add(u,fa,1); ans[u]=pos-dep[u]; bigson=0; if(keep==false) { add(u,fa,-1); mxcnt=0; }}int main(){ int n=read(); for(int i=1;i

转载于:https://www.cnblogs.com/jklover/p/10388879.html

你可能感兴趣的文章
Java开发环境系列:一篇能解决你99%问题的排雷日记
查看>>
从0开始学爬虫3之xpath的介绍和使用
查看>>
Shell成长之路
查看>>
vim下正则表达式的非贪婪匹配
查看>>
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>
模拟window系统的“回收站”
查看>>
OpenCV中的split函数
查看>>
MongoDB divide 使用之mongotempalte divide
查看>>
SSH不允许进行DNS解析
查看>>
Git(介绍和安装)
查看>>
磁盘管理
查看>>
重写与重载
查看>>
Python 爬取qqmusic音乐url并批量下载
查看>>
Java代码获取spring 容器的bean几种方式
查看>>
2015年3月5日(元宵节)——substr()与substring()的区别
查看>>
mysql 导出查询结果到文件
查看>>
Js参数值中含有单引号或双引号解决办法
查看>>
python5
查看>>
js转换/Date(........)/
查看>>