模板_点分治
来源:互联网 发布:闲鱼钓鱼网站源码 编辑:程序博客网 时间:2024/05/22 05:19
struct Node{int v,l;};vector<Node> g[N];int n,k,ans,sz,root,s[N],d[N],f[N];bool b[N];vector<int> deep;void GetRoot(int u,int fa){ s[u]=1,f[u]=0;int lim=g[u].size(); for(int i=0,v;i<lim;i++) if((v=g[u][i].v)!=fa&&!b[v]) GetRoot(v,u),s[u]+=s[v],f[u]=max(f[u],s[v]); f[u]=max(f[u],sz-s[u]);if(f[u]<f[root]) root=u;}void GetDeep(int u,int fa){ deep.push_back(d[u]),s[u]=1;int lim=g[u].size(); for(int i=0,v;i<lim;i++) if((v=g[u][i].v)!=fa&&!b[v]) d[v]=d[u]+g[u][i].l,GetDeep(v,u),s[u]+=s[v];}int Calc(int u,int w,int res=0){ deep.clear(),d[u]=w;GetDeep(u,0); sort(deep.begin(),deep.end()); for(int l=0,r=deep.size()-1;l<r;) if(deep[l]+deep[r]<=k) res+=r-l,l++; else r--; return res;}void GetAns(int u){ ans+=Calc(u,0),b[u]=1;int lim=g[u].size(); for(int i=0,v;i<lim;i++) if(!b[v=g[u][i].v]) ans-=Calc(v,g[u][i].l),f[0]=sz=s[u], GetRoot(v,root=0),GetAns(root);}
0 0
- 模板_点分治
- 点分治模板题
- 点分治 模板 poj1714
- POJ-1741 (点分治模板)
- 树上点分治模板bzoj1468
- 洛谷P3806 【模板】点分治1 【点分治】
- HDU - 1007 分治(最接近点对模板)
- POJ1741 Tree(点分治模板题)
- poj1741:Tree(点分治模板)
- 树分治(点分治模板)poj-1741 Tree
- 树分治(点分治模板)poj-1741 Tree
- 树分治(点分治模板)poj-1741 Tree
- poj 1741 洛谷 3806 【模板】点分治1 树的分治 点分治
- poj 1741 洛谷 3806 【模板】点分治1 树的分治 点分治
- HDU1007_分治_找最小距离点对
- 点分治模板 (树中点对距离)
- [POJ1741][JZOJ1166] 树中点对距离(点分治模板)
- 洛谷P2634 【模板】点分治(聪聪可可)
- 安装配置Eclipse过程
- 重温观察者模式
- java程序设计基础_陈国君版第五版_第八章例题
- 两个优先队列维护左右(12北邮多校)(4302)
- Xcode中Download的模拟器下载和文档下载
- 模板_点分治
- W3C-表现层的世界
- 通过代码自定义cell(cell的高度不一致)
- Android--使用Toast
- Android-Sample1-NetWork
- json从前台到后台传递
- C++读取txt文件操作
- linux搭建php5 nginx
- laravel开发环境准备