bzoj2152 / P2634 [国家集训队]聪聪可可(点分治)

时间:2022-12-23 11:03:42

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 &lbrack;国家集训队&rsqb;聪聪可可 解题报告

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

  2. 洛谷 P2634 &lbrack;国家集训队&rsqb;聪聪可可-树分治&lpar;点分治,容斥版&rpar; &plus;读入挂&plus;手动O2优化吸点氧才过。。。-树上路径为3的倍数的路径数量

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

  3. P2634 &lbrack;国家集训队&rsqb;聪聪可可&lpar;题解&rpar;&lpar;点分治&rpar;

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

  4. 模板—点分治A(容斥)(洛谷P2634 &lbrack;国家集训队&rsqb;聪聪可可)

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

  5. 洛谷P2634 &lbrack;国家集训队&rsqb;聪聪可可 (点分治)

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

  6. luogu P2634 &lbrack;国家集训队&rsqb;聪聪可可 点分治

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

  7. 洛谷-P2634 &lbrack;国家集训队&rsqb;聪聪可可 点分治

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

  8. &lbrack;bzoj2152&rsqb;&lbrack;聪聪和可可&rsqb; &lpar;点分治&plus;概率&rpar;

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

  9. P2634 &lbrack;国家集训队&rsqb;聪聪可可

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

随机推荐

  1. 好看的css3按钮和文本框

    .button{ width: 80px; line-height: 25px; text-align: center; ; color: #fff; text-shadow:1px 1px 1px ...

  2. &lbrack;itint5&rsqb;树中最大路径和

    http://www.itint5.com/oj/#13 要注意,一是空路径也可以,所以最小是0.然后要时刻注意路径顶多有两条子路径+根节点组成,所以更新全局最值时和返回上一级的值要注意分清. #in ...

  3. 完美atoi,哈哈

    /* atoi算法,要求完美版 有两种,一种是用longlong,一种是真用int “” " " “-” “+” “ -23” “ +23” “12a" "ab ...

  4. Linux &colon;&colon; vi E212&colon; Can&&num;39&semi;t open file for writing

    Linux :: vi E212: Can't open file for writing sysct1.conf 可能无写权限!查看方法:ls -lh /etc/sysct1.conf如果没有,则c ...

  5. Delphi XE2 生成的&period;exe 在未安装有Delphi的电脑上运行提示 &OpenCurlyDoubleQuote;丢失 rtl160&period;bpl”

    解决方案: XE2中加入了多平台的概念,默认的Release模式,也是带包编译,带运行时库的,所以,需要手工设置一下工程选项: 打开工程以后,Project-->Options-->左侧树 ...

  6. electron 使用 node-ffi C&plus;&plus; 动态链接库(DLL)

    一.为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序: 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的: 需 ...

  7. python接收axios的post请求,并处理后返回数据

    公司的python工程师不会js和python数据交互,所以我就去试了一下. 首先安装python,django框架和django-cors-headers. python官网下载,按提示操作,记住最 ...

  8. UVa Live 4794 - Sharing Chocolate 枚举子集substa &equals; &lpar;s - 1&rpar; &amp&semi; substa,记忆化搜索 难度&colon; 2

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  9. windows下使用redis c&plus;&plus;

    redis是高效key-value NOSQL 数据库 代码开源 windows下使用需要使用微软在redis官方上的改进版 地址 https://redis.io/download 寻找window ...

  10. forget stereo step word out8

      1★ stereo st əri əu 立体的   2★ step st əp 后,前妻所生,步骤