树分治
来源:互联网 发布:数据分析的方法 编辑:程序博客网 时间:2024/06/05 03:02
int tot,rt,mx,cnt,n,up;int first[N],vis[N],sz[N],w[N];void init(int n){ tot=0;ans=0; for(int i=0;i<=n;i++) { vis[i]=0; first[i]=-1; }}void dfs1(int u,int fa){ int maxv=1; sz[u]=1; for(int i=first[u];i!=-1;i=edge[i].next) { int v=edge[i].e; if(v==fa||vis[v]) continue; dfs1(v,u); sz[u]+=sz[v]; maxv=max(maxv,sz[v]); } maxv=max(maxv,sz[0]-sz[u]); if(maxv<mx) mx=maxv,rt=u;}void dfs2(int u,int fa){ sz[u]=1; for(int i=first[u];i!=-1;i=edge[i].next) { int v=edge[i].e; if(v==fa||vis[v]) continue; dfs2(v,u); sz[u]+=sz[v]; }}LL solve(int u){}void dfs(int u,int num){ sz[0]=num; mx=INF; dfs1(u,-1);//get_root vis[rt]=1; ans+=solve(rt); for(int i=first[rt];i!=-1;i=edge[i].next) { int v=edge[i].e; if(vis[v]) continue; ans-=solve(v); } for(int i=first[rt];i!=-1;i=edge[i].next) { int v=edge[i].e; if(vis[v]) continue; dfs(v,sz[v]); }}
阅读全文
0 0
- 树分治-点分治
- 树分治(点分治+边分治)
- 树分治
- 树分治
- 树分治
- 树的分治-点分治
- 【jzoj4715】【树上路径】【树】【分治】【点分治】
- POJ1741树的分治之点分治
- 树的分治
- POJ1655 【树的分治】
- hdu4670 树的分治
- 树分治+FFT
- 树|图 分治
- hdu4812(树分治)
- hdu 4812 树分治
- HDU 4916 树分治
- HDU 5102 树分治
- poj1741树分治
- 设计模式C++版:第十四式命令模式
- linux下ACL权限
- 3—YOLO:训练自己的数据
- Android stroke 边框线 某一边
- 浅析Java中CountDownLatch用法
- 树分治
- 树状网络攻击(LCA和树上差分的应用)
- Mysql 字符串Split之存储过程实现
- 贪心-POJ 1700 过河问题
- NIO阻塞与非阻塞IO
- mysql将一个表的数据插入到另外一个表,如果某个字段已经存在将不插入的sql
- vimscrip学习——基础
- (POJ
- 常用的mysql语句及命令语句