传送门

本蒟蒻AC的第二道点分治,调了30min" role="presentation" style="position: relative;">30min30min发现自己把gcd" role="presentation" style="position: relative;">gcdgcd写错了。

这题是一个点分治裸板,记录整颗子树中到根的距离模3" role="presentation" style="position: relative;">33的情况,容斥一下扣去多算的部分就行了。

代码如下:

#include<bits/stdc++.h>
#define N 20005
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
    return ans;
}
int n,tot,first[N],siz[N],msiz[N],d[N],cnt[3],sum,rt,ans=0;
bool vis[N];
struct Node{int w,v,next;}e[N<<1];
inline void add(int u,int v,int w){e[++tot].v=v,e[tot].w=w,e[tot].next=first[u],first[u]=tot;}
inline void getroot(int p,int fa){
    siz[p]=1,msiz[p]=0;
    for(int i=first[p];i;i=e[i].next){
        int v=e[i].v;
        if(v==fa||vis[v])continue;
        getroot(v,p),siz[p]+=siz[v];
        if(siz[v]>msiz[p])msiz[p]=siz[v];
    }
    msiz[p]=max(msiz[p],sum-siz[p]);
    if(msiz[p]<msiz[rt])rt=p;
}
inline void getdis(int p,int fa){
    ++cnt[d[p]];
    for(int i=first[p];i;i=e[i].next){
        int v=e[i].v;
        if(v==fa||vis[v])continue;
        d[v]=(d[p]+e[i].w)%3,getdis(v,p);
    }
}
inline int calc(int p,int v){
    cnt[0]=cnt[1]=cnt[2]=0,d[p]=v,getdis(p,0);
    return cnt[0]*cnt[0]+cnt[1]*cnt[2]*2;
}
inline void solve(int p){
    ans+=calc(p,0);
    vis[p]=true;
    for(int i=first[p];i;i=e[i].next){
        int v=e[i].v;
        if(vis[v])continue;
        ans-=calc(v,e[i].w);
        rt=0,sum=siz[v];
        getroot(v,0);
        solve(rt);
    }
}
inline int gcd(int a,int b){while(b){int t=a;a=b,b=t%a;}return a;}
int main(){
    memset(vis,false,sizeof(vis));
    n=read();
    for(int i=1;i<n;++i){
        int u=read(),v=read(),w=read()%3;
        add(u,v,w),add(v,u,w);
    }
    rt=0,msiz[0]=sum=n,getroot(1,0),solve(rt);
    int g=gcd(ans,n*n);
    printf("%d/%d",ans/g,n*n/g);
    return 0;
}

2018.07.20 bzoj2152: 聪聪可可(点分治)的更多相关文章

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

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

  2. 2018.07.20 洛谷P4178 Tree(点分治)

    传送门 又一道点分治. 直接维护子树内到根的所有路径长度,然后排序+双指针统计答案. 代码如下: #include<bits/stdc++.h> #define N 40005 using ...

  3. 2018.07.20 bzoj1614: Telephone Lines架设电话线(二分+最短路)

    传送门 这题直接做显然gg" role="presentation" style="position: relative;">gggg,看这数据 ...

  4. 2018.07.20 bzoj3211: 花神游历各国(线段树)

    传送门 维护区间开方,区间求和.这个是线段树常规操作. 显然一个数被开方若干次之后要么是1,要么是0,所以用线段树维护区间最大和区间和,如果区间最大不超过1就剪枝剪掉,不然就继续递归直到叶节点时停下进 ...

  5. 2018.07.20 atcoder Largest Smallest Cyclic Shift(贪心)

    传送门 题意:给你x个a,y个b,z个c,显然这些字符可以拼成若干字符串,然后求这些字符串中最小表示法表示出来的最大的那一个. 解法:贪心思想,用multiset维护现在拼成的字串,每次取一个最小的和 ...

  6. 【BZOJ2152】聪聪可可(点分治)

    [BZOJ2152]聪聪可可(点分治) 题面 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电 ...

  7. BZOJ2152 [国家集训队] 聪聪可可 [点分治]

    题目传送门 聪聪可可 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 5237  Solved: 2750[Submit][Status][Discuss ...

  8. BZOJ2152 聪聪可可 【点分治】

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

  9. 【bzoj2152】【聪聪可可】【点分治】

    [问题描写叙述] 聪聪和可但是兄弟俩.他们俩常常为了一些琐事打起来,比如家中仅仅剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(但是他们家仅仅有一台电脑)--遇到这样的问题,普通情况下石头剪刀布就好 ...

随机推荐

  1. 3.SpringMVC介绍

    1.采用Spring MVC的好处 Dispathcher Servlet必须做如下的事情: 1.根据URI调用相应的action 2.实例化正确的控制器类 3.根据请求参数值来构造表单bean 3. ...

  2. spring Ioc和DI

    spring的“控制反转”和“依赖注入”,个人看来是一个意思. 传统java程序中,使用一个对象的时候,都需要先new Object()创建一个新对象,才能使用.对象的控制权,在程序手里. 使用spr ...

  3. Unable to open file '.RES'

    Unable to open file '.RES' 另存工程,带来的隐患,工程图标也改不了. 搜索发现源码里某个man.cpp里带了prgram  resource aaa.res,换成新工程文件名 ...

  4. python os.mkdir与 os.makedirs

    1.mkdir( path [,mode] )      作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777.      如果目录有多级,则创建最后一级.如果最后一级目录的上级目 ...

  5. 基于HttpClient的HttpUtils(后台访问URL)

    最近做在线支付时遇到需要以后台方式访问URL并获取其返回的数据的问题,在网络上g了一把,发现在常用的还是Apache的HttpClient.因为以经常要用到的原故,因此我对其进行了一些简单的封装,在此 ...

  6. ArrayList 原理(2)

    1. 概述 关于Java集合的小抄中是这样描述的: 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预 ...

  7. Nginx打开目录浏览功能(autoindex)以及常见问题解决方案

    Nginx默认是不允许列出整个目录的.如需此功能,打开nginx.conf文件,在location server 或 http段中加入autoindex on;另外两个参数最好也加上去: autoin ...

  8. 使用 ImageEnView 给图片加水印,及建缩略图

    摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses  Math,imag ...

  9. 机房servlet过滤器

    1.源代码 loginform.html <html> <head> <title>使用过滤器改变请求编码</title> <meta http- ...

  10. poi转geohash

    import geohashimport sysfor line in sys.stdin: fields = line.strip().split('\t') hostid,POS_TIME,POS ...