luogu2643 聪聪可可
题意
其实转化之后的题意就是求出树上有多少条路径长度是3的倍数。求答案的时候只要将这个数字除以总路径数量就行了。
思路
考虑点分治。对于当前子树,分别求出出树中每个点到根的路径长度对\(3\)取余后为\(0,1,2\)的个数。然后就可以通过\(0-0,1-2\)组合的方式,统计出答案。
然后删除当前点,继续递归下一层子树。
luogu数据较水,不找重心也能水过。
代码
/*
* @Author: wxyww
* @Date: 2019-01-30 10:56:53
* @Last Modified time: 2019-01-30 11:40:39
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
#define int ll
const int N = 20010;
ll read() {
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
struct node {
int v,nxt,w;
}e[N << 1];
int head[N],ejs,n;
void add(int u,int v,int w) {
e[++ejs].v = v;e[ejs].w = w;e[ejs].nxt = head[u];head[u] = ejs;
}
int tot[4],now[4];
void dfs(int u,int father,int k) {
now[k]++;
for(int i = head[u];i;i = e[i].nxt) {
int v = e[i].v;if(v == father) continue;
dfs(v,u,(k + e[i].w) % 3);
}
}
ll ans = 0;
void solve(int u,int father) {
tot[0] = 1;tot[1] = tot[2] = 0;
for(int i = head[u];i;i = e[i].nxt) {
int v = e[i].v;if(v == father) continue;
for(int j = 0;j < 4;++j) now[j] = 0;
dfs(v,u,e[i].w % 3);
for(int j = 0;j < 4;++j) ans += tot[j] * now[(3 - j) % 3];
for(int j = 0;j < 4;++j) tot[j] += now[j];
}
for(int i = head[u];i;i = e[i].nxt) {
int v = e[i].v;if(v == father) continue;
solve(v,u);
}
}
signed main() {
n = read();
for(int i = 1;i < n;++i) {
int u = read(),v = read(),w = read();
add(u,v,w);add(v,u,w);
}
solve(1,0);
ans = ans * 2 + n;
int k = __gcd(ans,1ll * n * n);
printf("%lld/%lld",ans / k,1ll * n * n / k);
return 0;
}
luogu2643 聪聪可可的更多相关文章
- [bzoj2152][聪聪和可可] (点分治+概率)
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
- BZOJ 1415 【NOI2005】 聪聪和可可
题目链接:聪聪和可可 一道水题--开始还看错题了,以为边带权--强行\(O(n^3)\)预处理-- 首先,我们显然可以预处理出一个数组\(p[u][v]\)表示可可在点\(u\),聪聪在点\(v\)的 ...
- 【bzoj1415】 Noi2005—聪聪和可可
http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...
- bzoj1415[NOI2005]聪聪和可可
之前做的一些图上的期望步数的题大多用到高斯消元来求解(HNOI游走,SDOI走迷宫,etc),因此我一开始做这道题的时候想偏了- 这道题的性质:聪聪和可可之间的最短路长度严格递减.因为聪聪总可以多走一 ...
- 【BZOJ1415】 [Noi2005]聪聪和可可 概率与期望
其实题不难,不知提交了几次...不能代码MD...注意一些基本问题...SB概率题 #include <iostream> #include <cstdio> #include ...
- NOI2005 聪聪和可可
Sol 记忆化搜索. \(f[u][v]\) 表示聪聪在 \(u\) ,可可在 \(v\) ,聪聪抓到可可的期望. 预处理出 \(u\) 到 \(v\) 最短路径编号最小的点,记为 \(g[u][v] ...
- BZOJ 2152: 聪聪可可 树分治
2152: 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...
- bzoj 2152聪聪可可
2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MB Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰 ...
- HYSBZ - 2152 聪聪和可可
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
- 【BZOJ】2152: 聪聪可可(点分治)
http://www.lydsy.com/JudgeOnline/problem.php?id=2152 随便点分..... 只是我在考虑一个地方逗乐.. 当路径长度mod3=0的点数直接乘起来就好. ...
随机推荐
- CLOUD流程设置
流程-反写规则 允许超额
- Java基础——对象容器(顺序、集合、Hash)
扩展: For-each循环 for (String s: str) { System.out.println(s); } 等同于for (int i = 0; i < str.length; ...
- 排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题
目前我们在使用 Maxwell 在读线上机器的 binlog 同步我们的离线数据库. 这次错误定位上,首先线要确定问题是发生在生产者 还是队列 还是消费者.经过查看各机器上任务的运行日志,定位到了问题 ...
- uname -r查询版本不是安装的版本的问题
uname -r 查出来的版本与/lib/modules下面的内核版本不匹配.啥原因? 第一步,先strace uname -r看看这个uname -r到底从哪里获取的版本. strace没有看出来 ...
- URL & QRcode auto generator
URL & QRcode auto generator 二维码 npm & qrcode https://www.npmjs.com/package/qrcode https://ww ...
- debug方法
debug as -> spring boot->开始了 可以添加 ,, 来进行向下步骤:使用其他方法(在方法内打点) 一步步F6就可以了
- 一、PHP_OSS使用
一.OSS PHP SDK下载 二.文件目录 三.参考手册快速入门对oss操作 以及到控制台找到相应参数并填写
- indexOf刚开始写成IndexOf出错
{{# if(d.fronturlmin ==null||d.fronturlmin ==""){ }} <img src="@System.Configurati ...
- 使用@Validated分组遇到的坑
在使用@Validate注解分组校验时,如果指定分组,所有的需要验证的属性都必须添加指定分组才会校验 解决办法: 没有指明分组的属性都属于Default,所以分组接口继承Default就可以解决
- Introduction to Dynamic SQL
The idea of using dynamic SQL is to execute SQL that will potentially generate and execute another S ...