题意

在一棵树上任意选两个点,求它们距离模3为0的概率。

分析

树分治模板

Code

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define lson l,mid,p<<1
#define rson mid+1,r,p<<1|1
#define ll long long
using namespace std;
const int inf=1e9;
const int mod=1e9+7;
const int maxn=2e4+10;
typedef pair<int,int> pii;
vector<pii>g[maxn];
int n,sz[maxn],vis[maxn],maxp[maxn],f[3],c[3],ans,rt,sum;
void getrt(int u,int fa){
sz[u]=1;maxp[u]=0;
for(pii x:g[u]){
if(x.fi==fa||vis[x.fi]) continue;
getrt(x.fi,u);
sz[u]+=sz[x.fi];
maxp[u]=max(maxp[u],sz[x.fi]);
}
maxp[u]=max(maxp[u],sum-sz[u]);
if(maxp[u]<maxp[rt]) rt=u;
}
void getdis(int u,int fa,int d){
f[d%3]++;
for(pii x:g[u]){
if(x.fi==fa||vis[x.fi]) continue;
getdis(x.fi,u,d+x.se);
}
}
void calc(int u){
for(pii x:g[u]){
if(vis[x.fi]) continue;
f[0]=f[1]=f[2]=0;
getdis(x.fi,u,x.se);
ans+=f[0]*c[0]*2+f[1]*c[2]*2+f[2]*c[1]*2;
c[0]+=f[0];c[1]+=f[1];c[2]+=f[2];
}
c[0]=1;c[1]=c[2]=0;
}
void solve(int u){
vis[u]=c[0]=1;calc(u);
for(pii x:g[u]){
if(vis[x.fi]) continue;
sum=sz[x.fi],maxp[rt=0]=inf;
getrt(x.fi,0);solve(rt);
}
}
ll gcd(ll a,ll b){
return b==0?a:gcd(b,a%b);
}
int main(){
ios::sync_with_stdio(false);
//freopen("in","r",stdin);
cin>>n;
for(int i=1,x,y,w;i<n;i++){
cin>>x>>y>>w;
g[x].pb(pii(y,w));g[y].pb(pii(x,w));
}
sum=maxp[rt]=n;
getrt(1,0);solve(rt);
int a=ans+n,b=n*n;
int t=gcd(a,b);
a/=t;b/=t;
cout<<a<<'/'<<b<<endl;
return 0;
}

洛谷P2634 [国家集训队]聪聪可可 点分治模板的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. [洛谷P2634][国家集训队]聪聪可可

    题目大意:给你一棵树,随机选两个点,求它们之间路径长度是$3$的倍数的概率 题解:点分治,求出当前状态的重心,然后求出经过重心的答案,接着分治每棵子树.注意考虑重复计算的情况 卡点:无 C++ Cod ...

  7. 洛谷 P2634 [国家集训队]聪聪可可

    点分板子2333 注释都是错过的地方 #include<cstdio> #include<algorithm> using namespace std; typedef lon ...

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

    传送门 题意: 给出一颗树,每条边都有一定的边权. 先问点之间路径和为\(3\)的倍数的点对有多少. 思路: 点分治模板题. 可以将问题转化为经过一个点\(t\)的路径和不经过点\(t\)的路径两种情 ...

  9. [洛谷P1527] [国家集训队]矩阵乘法

    洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...

随机推荐

  1. vue的基本语法

    在学习vue之前,我们应了解一下什么是vue.js? 什么是Vue.js? Vue.js是目前最后一个前端框架,React是最流行的一个前端框架(react除了开发网站,还可以开发手机App,Vue语 ...

  2. 基础python规范

    一.注释     合理的代码注释应该占源代码的 1/3 左右,Python 语言允许在任何地方插入空字符或注释,但不能插入到标识符和字符串中间.     在 Python 中,通常包括 3 种类型的注 ...

  3. 用函数来编写实现strlen()函数功能

    strlen( )函数: 测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0’) //strlen( )函数:测试字符串实际长度的函数,它的返回值是字符串中字符的个数(不包含’\0 ...

  4. Linux 系统的安全加固

    Linux是一套免费使用和自由传播的类Unix操作系统,作为一个开放源代码的操作系统,Linux服务器以其安全.高效和稳定的显著优势而得以广泛应用,但如果不做好权限的合理分配,Linux系统的安全性还 ...

  5. Java 并发进阶常见面试题总结

    声明:本文内容完全来自网络,转自GitHub->JavaGuide(https://github.com/Snailclimb/JavaGuide),致谢      1. synchronize ...

  6. 服务返回的json数据过大,nginx无法返回给client

    现象:请求同样的服务器,N多个接口中,只有一个接口未返回:从日志看,请求已到后端服务,并返回 解决方案:配置nginx缓冲大小 ###Nginx的缓冲区的大小 proxy_buffer_size 5m ...

  7. thinkphp 4.8 漏洞测试

    首先要部署环境 这里利用docker的方便部署性,来直接找个现成的    git clone https://github.com/vulnspy/thinkphp-5.1.29.git 下载安装后, ...

  8. iOS UIControl 事件的说明(转)

    在控件事件中,简单解释下下面几个事件. 说明:由于是在“iOS 模拟器”中测试的,所以不能用手指,只能用鼠标. 1)UIControlEventTouchDown 指鼠标左键按下(注:只是“按下”)的 ...

  9. docker 无法使用vi

    更新来源 apt-get update   安装vim apt-get install -y vim

  10. ES6的拓展

    1.String的拓展 ① str.includes("abc"); ② str.startWith("abc"); ③ str.endWith("a ...