P2634 [国家集训队]聪聪可可

淀粉质点分治板子

边权直接 mod 3

直接点分治统计出所有的符合条件的点对再和总方案数约分

至于约分.....gcd搞搞就好辣

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
inline int Max(int a,int b){return a>b?a:b;}
void read(int &x){
static char c=getchar();x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
}
#define N 20005
inline int M(int x){return x<?x:x-;}
int n,rt,sum,ans,tot,mxd[N],siz[N],dis[N],ra[N],rb[];bool vis[N];
int cnt,hd[N],nxt[N<<],ed[N],poi[N<<],val[N<<];
void adde(int x,int y,int v){
nxt[ed[x]]=++cnt; hd[x]=hd[x]?hd[x]:cnt;
ed[x]=cnt; poi[cnt]=y; val[cnt]=v;
}
void getrt(int x,int fa){
siz[x]=; mxd[x]=;
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(to==fa||vis[to]) continue;
getrt(to,x);
siz[x]+=siz[to];
mxd[x]=Max(mxd[x],siz[to]);
}mxd[x]=Max(mxd[x],sum-siz[x]);
if(mxd[x]<mxd[rt]) rt=x;
}
void getdis(int x,int fa){
ra[++ra[]]=dis[x];
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(to==fa||vis[to]) continue;
dis[to]=M(dis[x]+val[i]);
getdis(to,x);
}
}
void calc(int x){
rb[]=;
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(vis[to]) continue;
ra[]=; dis[to]=val[i];
getdis(to,x);
for(int i=ra[];i;--i)
ans+=rb[ra[i]?-ra[i]:];
for(int i=ra[];i;--i) ++rb[ra[i]];
}rb[]=rb[]=rb[]=;
}
void solve(int x){
vis[x]=; calc(x);
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(vis[to]) continue;
sum=siz[to]; rt=;
getrt(to,x); solve(rt);
}
}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main(){
read(n); register int i; int q1,q2,q3;
for(i=;i<n;++i){
read(q1),read(q2),read(q3); q3%=;
adde(q1,q2,q3); adde(q2,q1,q3);
}mxd[rt=]=n+; sum=n; getrt(,); solve(rt);
ans=ans*+n; tot=n*n;
int g=gcd(ans,tot); ans/=g; tot/=g;
printf("%d/%d",ans,tot);
return ;
}

bzoj2152 / P2634 [国家集训队]聪聪可可(点分治)的更多相关文章

  1. 洛谷 P2634 [国家集训队]聪聪可可 解题报告

    P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一 ...

  2. 洛谷 P2634 [国家集训队]聪聪可可-树分治(点分治,容斥版) +读入挂+手动O2优化吸点氧才过。。。-树上路径为3的倍数的路径数量

    P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...

  3. P2634 [国家集训队]聪聪可可(题解)(点分治)

    P2634 [国家集训队]聪聪可可(题解)(点分治) 洛谷题目 #include<iostream> #include<cstdlib> #include<cstdio& ...

  4. 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)

    洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...

  5. 洛谷P2634 [国家集训队]聪聪可可 (点分治)

    题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...

  6. luogu P2634 [国家集训队]聪聪可可 点分治

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  7. 洛谷-P2634 [国家集训队]聪聪可可 点分治

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  8. [bzoj2152][聪聪和可可] (点分治+概率)

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  9. P2634 [国家集训队]聪聪可可

    淀粉质 第二道点分治的题 关于点分治的一点理解: 所谓点分治,其实就是把要求的问题(一般与路径有关)划分成两种情况 1.路径经过rt(根节点) 2.路径在根节点的子树内 我们只需要处理情况1,因为情况 ...

随机推荐

  1. Spring MVC POM示例

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. 【LeetCode每天一题】Fibonacci Number(斐波那契数列)

    The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such th ...

  3. vue watch 监听element upload组件上传成功返回的url列表

    因为 on-success 上传成功返回的是一个异步的结果....如果父组件需要这个结果的话 必须用watch 监听 然后里面建立一个 save()方法 save方法里面再调用接口 传需要的上传之后的 ...

  4. max_execution_time with sleep

    Under Linux, sleeping time is ignored, but under Windows, it counts as execution time. Note The set_ ...

  5. 还是Go 为了伟大的未来

    今天,还是想讲讲Go 我觉得还没讲够,哈哈哈 其实,是想把框架再清晰些,因为上一篇框架没能引入goroutine(协程),感觉比较遗憾 下边,我就用上goroutine,但这里的协程仅是为了演示,没有 ...

  6. iOS 开发笔记 - 开发中如何实现自动检测更新APP

    1.获取当前项目APP版本号 2.拿到AppStore项目版本号 3.对比版本号,实现更新功能 直接上代码: #import "ViewController.h" //1一定要先配 ...

  7. PyQT5速成教程-1 简介与环境搭建

    本文由 沈庆阳 所有,转载请与作者取得联系! PyQt简介 一个良好的界面是人机交互中十分重要的一环. Python作为脚本语言,起初并未拥有GUI开发的部分.但随着其开放的扩展性,使得Python不 ...

  8. Linux 切换用户

    Linux用户之间切换 在linux操作系统中,用户之间的切换使用,su 命令.linux系统环境中的用户信息如下: 用户名 角色 备注 root 管理员 root用户下配置的jdk 版本为:1.8 ...

  9. webpack打包二进制文件报错

    错误示例,如下图所示: 修改webpack的module部分的rules,在其中添加一下代码: { test: /\.woff[0-9]{0,}$/, loader: "url-loader ...

  10. LeetCode69.x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...