聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经玩儿腻了这种低智商的游戏。他们的爸爸快被他们的争吵烦死了,所以他发明了一个新游戏:   

由爸爸在纸上画n个“点”,并用n-1条“边”把这n个“点”恰好连通(其实这就是一棵树)。并且每条“边”上都有一个数。接下来由聪聪和可可分别随即选一个点(当然他们选点时是看不到这棵树的),如果两个点之间所有边上数的和加起来恰好是3的倍数,则判聪聪赢,否则可可赢。   

聪聪非常爱思考问题,在每次游戏后都会仔细研究这棵树,希望知道对于这张图自己的获胜概率是多少。现请你帮忙求出这个值以验证聪聪的答案是否正确。

THUWC晚上无聊来刷blog

今天凉凉

还是这道树分治比较友善

(p.s. 其实直接dfs就可以了)

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 20010
using namespace std;
struct edge{ int v,c,nt; } G[N<<1];
int h[N],d[N],f[N],vis[N],sz[N],n,m,cnt=1,rt,Sz,c[3],ans=0;
inline int gcd(int a,int b){for(int c;b;a=b,b=c)c=a%b;return a;
}
inline void adj(int x,int y,int c){G[++cnt]=(edge){y,c,h[x]}; h[x]=cnt;G[++cnt]=(edge){x,c,h[y]}; h[y]=cnt;
}
void gSz(int x,int p){++Sz;for(int v,i=h[x];i;i=G[i].nt)if(!vis[v=G[i].v] && v!=p) gSz(v,x);
}
void gRt(int x,int p){f[x]=0; sz[x]=1;for(int v,i=h[x];i;i=G[i].nt)if(!vis[v=G[i].v] && v!=p){gRt(v,x); sz[x]+=sz[v]; f[x]=max(f[x],sz[v]);}f[x]=max(f[x],Sz-sz[x]);if(f[x]<f[rt]) rt=x;
}
void dfs(int x,int p,int d){c[d%3]++;for(int v,i=h[x];i;i=G[i].nt)if(!vis[v=G[i].v] && v!=p) dfs(v,x,d+G[i].c);
}
int Calc(int x,int d){*c=c[1]=c[2]=0; dfs(x,0,d);return c[1]*c[2]*2+*c*(*c-1)+*c;
}
void dgs(int x){vis[x]=1; ans+=Calc(x,0);for(int v,i=h[x];i;i=G[i].nt)if(!vis[v=G[i].v]){ans-=Calc(v,G[i].c);Sz=0; gSz(v,0);f[rt=0]=1<<30;gRt(v,0); dgs(rt);}
}
int main(){scanf("%d",&n);for(int x,y,c,i=1;i<n;++i){scanf("%d%d%d",&x,&y,&c);adj(x,y,c);}Sz=n; *f=1<<30;gRt(1,0); dgs(rt);int t=n*n,r=gcd(t,ans); printf("%d/%d\n",ans/r,t/r);
}

Jzoj1967 聪聪可可相关推荐

  1. BZOJ 2152 「国家集训队」聪聪可可(点分治)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2152 是 hydro 的 BZOJ ...

  2. BZOJ1415 [Noi2005]聪聪和可可 【SPFA + 期望dp记忆化搜索】

    题目 输入格式 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  3. BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp

    题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...

  4. 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1640  Solved: 962 Description ...

  5. Bzoj 2152: 聪聪可可(点分治)

    2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MB Submit: 2683 Solved: 1420 [Submit][Status][Discuss ...

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

    链接:https://www.luogu.org/problemnew/show/P2634 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人 ...

  7. P2634 [国家集训队]聪聪可可(树上启发式合并)

    P2634 [国家集训队]聪聪可可(树上启发式合并) 题意: 一颗n个点的树,问其中两点之间的边上数的和加起来是3的倍数的点对有多少个? 输出这样的点对所占比例 题解: 没有修改,统计边长为3的倍数, ...

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

    P2634 [国家集训队]聪聪可可 题意: 一颗n个点的树,问其中两点之间的边上数的和加起来是3的倍数的点对有多少个? 输出这样的点对所占比例 题解: 因为是求三的倍数,我们num来记录%3=0,1, ...

  9. bzoj2152 聪聪可可

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

最新文章

  1. ADF Jar包循环引用会出问题
  2. 万万没想到 I 这 7 件超酷的事情,让开发更有效率
  3. Kubernetes存储之PV-PVC
  4. 【心塞】因为一个低级错误,生产数据库崩溃了将近半个小时
  5. 跟我学jQuery(二) 初识jQuery
  6. strcpy用于调用的参数太少_C和汇编如何互相调用?嵌入式工程师必须掌握
  7. CMFCButton使用简介
  8. 深入理解Java泛型
  9. 招商银行周伟:Fintech数据开放平台之数据库军规和内功修炼(含PPT)
  10. sql关键字_SQL关键字
  11. python之路-基础篇-002
  12. imagick php手册,windows7下安装php的imagick和imagemagick扩展教程
  13. 微服务调用组件Ribbon底层调用流程分析
  14. Arduino与Proteus仿真实例-TB6612FNG驱动直流电机仿真
  15. 【微信自动续费】委托代扣接口常见问题QA
  16. HTML基础之 小白入门
  17. Android开发者的Ane简单入门
  18. Excel 入门基础
  19. 论文阅读:Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction
  20. Java配车标识英文单词怎么写_车用英语怎么写

热门文章

  1. mongodb数据库优缺点分析(扫盲)
  2. Word里的标尺怎么用?这五个Word标尺的妙用赶紧收藏
  3. Vue中一些需要注意的点(采坑)
  4. Ethereum开发
  5. Django学习之模型层---多表操作之查(一)
  6. 图片生成base64格式
  7. 170虚拟sim服务器,虚拟大容量SIM卡服务器端管理软件的设计与现实
  8. 计算机技术指标主频是指微机的时钟频率,计算机中央处理器(CPU)的主要性能指标...
  9. mysql存储图片的几种方式_PHPmysql存储照片的两种方式
  10. 同济大学符长虹教授作“基于计算机视觉的无人飞行器自主导航研究与应用”为题的报告