#include<cstdio>
 #include<algorithm>
 using namespace std;
 ;
 ],head[N],son[N],f[N],d[N],root,ans,n,sum,cnt;
 bool vis[N];
 ];
 void insert(int u,int v,int w){
     e[++cnt].to=v;e[cnt].next=head[u];e[cnt].v=w;head[u]=cnt;
 }

 int gcd(int a1,int a2)
 {
     int a3=a1%a2;
     for(;a3;)
       {
         a1=a2;
         a2=a3;
         a3=a1%a2;
       }
     return a2;
 }

 void getroot(int x,int fa){
     son[x]=;f[x]=;
     for (int i=head[x];i;i=e[i].next){
         int v=e[i].to;
         if (!vis[v]&&v!=fa){
             getroot(v,x);
             son[x]+=son[v];
             f[x]=max(f[x],son[v]);
         }
     }
     f[x]=max(f[x],sum-son[x]);
     if (f[root]>f[x])root=x;
 }

 void getdeep(int x,int fa){
     t[d[x]]++;
     for (int i=head[x];i;i=e[i].next){
         int v=e[i].to;
         if (v!=fa&&!vis[v]){
             d[v]=(d[x]+e[i].v)%;
             getdeep(v,x);
         }
     }
 }

 int cal(int x,int now){
     t[]=t[]=t[]=;
     d[x]=now;
     getdeep(x,);
     ]*t[]*+t[]*t[];
 }

 void work(int x){
     ans+=cal(x,);
     vis[x]=;
     for (int i=head[x];i;i=e[i].next){
         int v=e[i].to;
         if (!vis[v]) {
             ans-=cal(v,e[i].v);
             root=;sum=son[v];
             getroot(v,);
             work(root);
         }
     }
 }

 int main(){
     scanf("%d",&n);
     int u,v,w;
     ;i<n;i++){
         scanf("%d%d%d",&u,&v,&w);
         w%=;
         insert(u,v,w);
         insert(v,u,w);
     }
     f[]=sum=n;
     root=;
     getroot(,);
     work(root);
     int t=gcd(ans,n*n);
     printf("%d/%d",ans/t,n*n/t);
 }

树的点分治  首先找树的重心,把根节点设为树的重心。然后进行点分治(就是从根开始,看经过根的方案数,在把根删掉,求每棵子树)。

bzoj 2152: 聪聪可可的更多相关文章

  1. 【BZOJ 2152】聪聪可可 点分治

    对于一棵树,fdrt找到重心,然后分治每个子树. 在一棵以重心为根的树上,符合条件的链是: 1.过重心(根) 2.不过重心 对于1我们只需dfs出距离重心(根)的距离然后统计再减去有重叠的边 对于2我 ...

  2. bzoj 2152聪聪可可

    2152: 聪聪可可 Time Limit: 3 Sec  Memory Limit: 259 MB Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰 ...

  3. BZOJ 2152: 聪聪可可 树分治

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

  4. 【BZOJ】2152: 聪聪可可(点分治)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2152 随便点分..... 只是我在考虑一个地方逗乐.. 当路径长度mod3=0的点数直接乘起来就好. ...

  5. BZOJ 2152: 聪聪可可 点分治

    2152: 聪聪可可 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php ...

  6. bzoj 2152: 聪聪可可 树的点分治

    2152: 聪聪可可 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 485  Solved: 251[Submit][Status] Descripti ...

  7. 洛谷 2634&amp;&amp;BZOJ 2152: 聪聪可可【点分治学习+超详细注释】

    2152: 聪聪可可 Time Limit: 3 Sec  Memory Limit: 259 MBSubmit: 3435  Solved: 1776[Submit][Status][Discuss ...

  8. BZOJ 1415 【NOI2005】 聪聪和可可

    题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的 ...

  9. HYSBZ - 2152 聪聪和可可

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

  10. BZOJ 1415: [Noi2005]聪聪和可可( 最短路 + 期望dp )

    用最短路暴力搞出s(i, j)表示聪聪在i, 可可在j处时聪聪会走的路线. 然后就可以dp了, dp(i, j) = [ dp(s(s(i,j), j), j) + Σdp(s(s(i,j), j), ...

随机推荐

  1. Ubuntu搭建NFS

    NFS全称是Network File System,网络文件系统.它可以通过网络实现文件共享.其结构图大概是这样的: 在机器E上开启NFS服务,机器ABCD都挂载NFS,这样可以实现机器ABCD共享文 ...

  2. Java使用POS打印机(无驱)

    使用原因:应项目要求,需要使用打印机,但是如果使用Windows驱动来实现打印,在某些条件下会发生网络堵塞等,而且没有提示,所以为了确保信息的完整,避免数据丢失.我们使用无驱打印(直接写端口的方法), ...

  3. CSS 代码技巧与维护 ★ Mozilla Hacks – the Web developer blog

    原文链接:https://hacks.mozilla.org/2016/05/css-coding-techniques/ 译文链接 :http://www.zcfy.cc/article/css-c ...

  4. VMware 中如何打开U盘弹出U盘或者移动硬盘的(两种方法)

    1.U盘如下,插入后都是直接在win里面显示的 2.选择连接u盘 3.u盘就可以在虚拟机里面显示了 4.弹出则选择断开连接 扩展:如果无效:请参考这种方法 (给虚拟机分配一个临时硬盘,然后设置这个临时 ...

  5. MYSQL 分组排序

    http://www.cnblogs.com/merru/articles/4626045.html SELECT a.shop_id, a.price, count(*) as rankFROM m ...

  6. Python模块之optparse

    参考: http://www.cnblogs.com/captain_jack/archive/2011/01/11/1933366.html https://docs.python.org/2/li ...

  7. dp和px以及sp

    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖 ...

  8. &quot;provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接&quot;错误的解决方法

    这个错误主要有以下几个原因造成: 1. 错误的连接字符串:例如数据源的实例名称“\"错误写成"/"了 2.Named Pipes(NP)没有启动 其他原因,详见:http ...

  9. 7款适用老旧设备并对初学者非常友好的轻量级Linux发行版

    我们由从 7 到 1 的顺序向大家介绍. 7. Linux Lite 正如其名,Linux Lite 是 Linux 发行版的一个轻量级版本,用户并不需要强大的硬件就可以将它跑起来,而且其使用非常简单 ...

  10. 多线程问题(JVM重排序)

    public class Test3 { private static boolean ready; private static int Number; private static class R ...