题意

在一棵树上任意选两个点,求它们距离模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. How does a browser know which response belongs to which request?

    Today I knows that the server never send a request to a client! It just make response~ So,if the bro ...

  2. 简单分析BeanPostProcessor

    1. 什么是BeanPostProcessorBeanPostProcessor是一个接口,有两个方法,分别是:Object postProcessBeforeInitialization(Objec ...

  3. JS的日期的知识与格式化

    需要知道的JS的日期的知识,都在这了 https://juejin.im/post/5d12b308f265da1b7c612746?utm_source=gold_browser_extension ...

  4. js的一些兼容融性问题

    1.非行内样式获取 高级浏览器 getComputedStyle(obox.false)//获取所有属性 ie浏览器 box.currentStyle//获取所有属性 兼容写法 function ge ...

  5. jquery.serializejson.min.js的妙用

    关于这个jquery.serializejson.min.js插件来看,他是转json的一个非常简单好用的插件. 前端在处理含有大量数据提交的表单时,除了使用Form直接提交刷新页面之外,经常碰到的需 ...

  6. css的一些样式

    input标签中的一些样式: <input type="text">:表示输入文本 <input type="password">:表示 ...

  7. NET如何使用ELinq-实现增删改查

    1 通过对ELinq主页的参考和学习,以及在项目中(wpf项目中用到的)中应用,ORM框架中的ELinq确实非常的强大,特此以建立wpf项目为例子来总结下如何在项目中应用ELinq,要想使用这个框架首 ...

  8. mydql 函数和存储过程

    存储过程 CREATE PROCEDURE getUid (IN phone CHAR(11), OUT uid INT ) READS SQL DATA BEGIN select u.id from ...

  9. eclipse svn 插件离线安装后connector获取不到的问题解决

    最近换了一家公司,写代码的电脑不给外网,所以各种麻烦的问题就来了,这里就说一下eclipse 安装SVN插件的一个小问题,虽说是小问题,但也折腾了我好几个小时,当然也可以不用这个插件,直接安装SVN客 ...

  10. 11.SSH整合

    由于自己学习的版本比较落后,这里就不总结了 在我这个版本整合的过程中的几点问题: 1.在web.xml的配置过程中: <!-- 如果使用的是load获取数据,在jsp页面申请取得数据时才真正的执 ...