点分治X2
1.聪聪可可
点分治板子
然而想那个 t1[1]*t1[2]*2+t1[0]*t1[0]想了好久
就是最基本的组合方法 毕竟(2,5)和(5,2)可是要算两次的
画画图就好了
(不要像我一样盯着大佬们的显然可得懵逼23333)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define maxn 40000
using namespace std;
struct eg
{
int to,v,nxt;
}b[maxn];
,f[maxn],sz[maxn],vis[maxn],d[maxn]={},ans,root,sum,t1[];
int gcd(int x,int y){return y?gcd(y,x%y):x;}
void link(int x,int y,int z)
{
b[++tot].nxt=head[x];
b[tot].to=y;
b[tot].v=z;
head[x]=tot;
}
void getroot(int u,int fa)
{
sz[u]=,f[u]=;
for (int i=head[u];i;i=b[i].nxt)
{
int t=b[i].to;
if (vis[t]||t==fa) continue;
getroot(t,u);
sz[u]+=sz[t];
f[u]=max(f[u],sz[t]);
}
f[u]=max(f[u],sum-sz[u]);
if (f[root]>f[u]) root=u;
}
void getdeep(int x,int fa)
{
t1[d[x]]++;
for (int i=head[x];i;i=b[i].nxt)
{
int t=b[i].to;
if (vis[t]||t==fa) continue;
d[t]=(d[x]+b[i].v)%;
getdeep(t,x);
}
}
int cal(int x,int vv)
{
d[x]=vv%;
t1[]=t1[]=t1[]=;
getdeep(x,);
]*t1[]*+t1[]*t1[];
}
void work(int x)
{
ans+=cal(x,);
vis[x]=;
for (int i=head[x];i;i=b[i].nxt)
{
int t=b[i].to;
if (vis[t]) continue;
ans-=cal(t,b[i].v);
sum=sz[t];
root=;
getroot(t,);
work(root);
}
}
int main()
{
int n;
scanf ("%d",&n);
;i<n;++i)
{
int x,y,w;
scanf ("%d%d%d",&x,&y,&w);
link(x,y,w);
link(y,x,w);
}
root=;f[]=n,sum=n;
getroot(,);
work(root);
int l=gcd(ans,n*n);
cout<<(ans/l)<<"/"<<(n*n/l);
;
}
2.POJ1741 树上的点对
考试的时候碰到这题 感觉就像bilegou
然后我这个天大的sb就发挥我的本性打了个链剖哈哈哈哈哈哈哈哈 还没打完
考完之后老师说正解是点分治 然而考前我们是没有学过这玩意儿的(和善
去学了一下 只感觉dalao的论文写的真好
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 20010
using namespace std;
,dep[maxn],sz[maxn],f[maxn],vis[maxn],d[maxn];
int sum,root,n,k,ans;
void link(int x,int y,int z)
{
nxt[++tot]=head[x];
to[tot]=y;
dis[tot]=z;
head[x]=tot;
}
void gr(int x,int fa)
{
sz[x]=;f[x]=;
for (int i=head[x];i;i=nxt[i])
{
int t=to[i];
if (t==fa||vis[t]) continue;
gr(t,x);
sz[x]+=sz[t];
f[x]=max(f[x],sz[t]);
}
f[x]=max(f[x],sum-sz[x]);
if (f[root]>f[x]) root=x;
}
void gd(int x,int fa)
{
dep[++dep[]]=d[x];
for (int i=head[x];i;i=nxt[i])
{
int t=to[i];
if (t==fa||vis[t]) continue;
d[t]=d[x]+dis[i];
gd(t,x);
}
}
int work(int x,int v)
{
d[x]=v;dep[]=;
gd(x,);
sort(dep+,dep+dep[]+);
;
,r=dep[];l<r;)
{
if (dep[l]+dep[r]<=k) ans+=r-l,l++;
else r--;
}
return ans;
}
void dfs(int u)
{
ans+=work(u,);
vis[u]=;
for (int i=head[u];i;i=nxt[i])
{
int t=to[i];
if (vis[t]) continue;
ans-=work(t,dis[i]);
sum=sz[t];
root=;
gr(t,);
dfs(root);
}
}
int main()
{
//freopen ("in.txt","r",stdin);
//freopen ("out.txt","w",stdout);
while (scanf ("%d%d",&n,&k))
{
memset(vis,,sizeof(vis));
memset(head,,sizeof(head));
root=,ans=,tot=;
) break;
;i<n;++i)
{
int x,y,z;
scanf ("%d%d%d",&x,&y,&z);
link(x,y,z);
link(y,x,z);
}
sum=n,f[]=0x7fffffff;
gr(,);
dfs(root);
cout<<ans<<endl;
}
;
}
点分治X2的更多相关文章
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- BZOJ 1176 [Balkan2007]Mokia ——CDQ分治
[题目分析] 同BZOJ2683,只需要提前处理s对结果的影响即可. CDQ的思路还是很清晰的. 排序解决一维, 分治时间, 树状数组解决一维. 复杂度是两个log [代码] #include < ...
- 初识CDQ分治
[BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 200 ...
- BNUOJ 51279[组队活动 Large](cdq分治+FFT)
传送门 大意:ACM校队一共有n名队员,从1到n标号,现在n名队员要组成若干支队伍,每支队伍至多有m名队员,求一共有多少种不同的组队方案.两个组队方案被视为不同的,当且仅当存在至少一名队员在两种方案中 ...
- 【BZOJ-4456】旅行者 分治 + 最短路
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 254 Solved: 162[Submit][Status] ...
- 【BZOJ-1176&2683】Mokia&简单题 CDQ分治
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- NOI题库分治算法刷题记录
今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...
- Bzoj2683 简单题 [CDQ分治]
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
- 初学CDQ分治-NEU1702
关于CDQ分治,首先需要明白分治的复杂度. T(n) = 2T(n/2)+O(kn), T(n) = O(knlogn) T(n) = 2T(n/2)+O(knlogn), T(n) = O(knlo ...
随机推荐
- 基于 HTML5 WebGL 的 3D 仓储管理系统
仓储管理系统(WMS)是一个实时的计算机软件系统,它能够按照运作的业务规则和运算法则,对信息.资源.行为.存货和分销运作进行更完美地管理,使其最大化满足有效产出和精确性的要求.从财务软件.进销存软件C ...
- 个人笔记之json实现模糊查询
1:首先创建一个项目如:(说明:此项目是在eclipse创建的) 2.在创建相对应的包如: 3.创建写好相对应的配置文件如: applicationContext.xml具体内容如下: <?xm ...
- js 与 ios Android交互
一.android 交互 1.js调用webview 在android API Level 17及以上的版本中,就会出现js调用不了android的代码,这是版本兼容的问题,需要在调用的方法上面加一个 ...
- 用lua+redis实现一个简单的计数器功能 (一)
首先安装环境 依赖环境有 luajit http://luajit.org ngx_devel_kit https://github.com/simpl/ngx_devel_kit echo-ngin ...
- SpringMvc架构下css、js、jpg加载失败问题
SpringMvc架构下css.js.jpg加载失败问题 springMvc搭建成功后,页面出现一些错误,jsp.js等静态资源加载失败.导致页面没有显示任何样式以及 此处原因很简单,是因为相对路径在 ...
- MYSQL瓶颈
一般来说, 在使用的时候 性能从某个数值开始.突然大大下降,说明就到了瓶颈期. mysql 瓶颈有2种,一种是 cpu瓶颈 一种是 io瓶颈.cpu瓶颈多是由io引起. 而io可以通过 show ...
- PHP数组实际占用内存大小的分析
一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G.下面我们可以粗略的估算PHP数组占用内存的大小,首先我们测试1000个元素的整数 ...
- PHP获取路径或目录实现
<?php /** * PHP获取路径或目录实现 */ //魔术变量,获取当前文件的绝对路径 echo "__FILE__: ========> ".__FI ...
- PHP 静态缓存
今天来说说PHP页面的静态缓存. 根据个人理解,由于客户端重复的请求某个页面,导致该页面短时间内被重复请求相同的数据,导致给服务端一定的压力,同时用户访问速度也会变慢.此时如果把这个页面缓存起来,客户 ...
- javascript跳跃式前进(3) - 跳入JSON
前言 JSON崛起不是意外,是顺应时代;相当简洁小巧的书写模式及阅读方式; 基础 看这篇文章: JSON知识点汇总_W3SCHOOL 初步进阶 早期的解析仅仅实用eval() ,可是这货太easy给注 ...