luogu2634 聪聪可可 (树形dp)
要求出两点间距离==0(mod3) 的数量,然后除以(n*n)
设f[i][j]为i的子树到i的距离==j(mod3)的数量,然后做树形dp即可
因为要最简,所以要求一下gcd,然后除下去
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=; int rd(){
int x=;char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x;
} struct Edge{
int b,l,ne;
}eg[maxn*],son[maxn];
int N;
int f[maxn][],f2[maxn][],egh[maxn],sonh[maxn],ect,sct;
int ansp; inline void adeg(int a,int b,int c){
eg[ect].b=b;eg[ect].l=c;eg[ect].ne=egh[a];egh[a]=ect++;
} void build(int x,int fa){
for(int i=egh[x];i!=-;i=eg[i].ne){
int b=eg[i].b;if(b==fa) continue;
son[sct].b=b;son[sct].l=eg[i].l;son[sct].ne=sonh[x];sonh[x]=sct++;
build(b,x);
}
} void dfs(int x){
f[x][]=;
for(int i=sonh[x];i!=-;i=son[i].ne) dfs(son[i].b);
for(int i=sonh[x];i!=-;i=son[i].ne){
int b=son[i].b,l=son[i].l;
for(int j=;j<=;j++) f[x][(j+l)%]+=f[b][j],f2[b][(j+l)%]=f[b][j];
}ansp+=f[x][];
for(int i=sonh[x];i!=-;i=son[i].ne){
int b=son[i].b,l=son[i].l;
for(int j=;j<=;j++) ansp+=f2[b][(-j%)%]*(f[x][j]-f2[b][j]);
}
} int gcd(int a,int b){
if(!b) return a;
else return gcd(b,a%b);
} int main(){
int i,j,k;
N=rd();
memset(egh,-,sizeof(egh));memset(sonh,-,sizeof(sonh));
for(i=;i<N;i++){
int a=rd(),b=rd(),c=rd();
adeg(a,b,c);adeg(b,a,c);
}build(,);dfs();
i=gcd(ansp,N*N);
printf("%d/%d\n",ansp/i,N*N/i);
}
luogu2634 聪聪可可 (树形dp)的更多相关文章
- BZOJ 2152 聪聪可可(树形DP)
给出一颗n个点带边权的树(n<=20000),求随机选择两个点,使得它们之间的路径边权是3的倍数的概率是多少. 首先总的对数是n*n,那么只需要统计路径边权是3的倍数的点对数量就行了. 考虑将无 ...
- 【国家集训队】聪聪可可 ——树形DP
感觉是一道很妙的树形DP题,充分利用到了树的性质(虽然说点分治也可以做,,,,但是本蒟蒻不会啊) 然而某Twilight_Sx大佬表示这道题真的非常水,,,本蒟蒻也只能瑟瑟发抖了 本蒟蒻表示还是要经过 ...
- 洛谷 P2634 聪聪可可 —— 树形DP / 点分治
题目:https://www.luogu.org/problemnew/show/P2634 今天刚学了点分治,做例题: 好不容易A了,结果发现自己写的是树形DP...(也不用找重心)(比点分治快) ...
- bzoj2152 聪聪可可 (树形dp)
大意: 给定树, 随机选两点, 求两点距离是3的倍数的概率. 树形dp入门水题, 枚举每个点作为lca时的答案即可. #include <iostream> #include <qu ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- BZOJ 1415 聪聪和可可(期望DP)
我们可以用n次BFS预处理出 to[][]数组,to[i][j]表示聪聪从i点到j点第一步会走哪个点. 那么对于聪聪在i点,可可在j点,聪聪先走,定义dp[i][j]表示步数期望. 那么显然有dp[i ...
- BZOJ 1415 [NOI2005]聪聪与可可 (概率DP+dfs)
题目大意:给你一个无向联通图,节点数n<=1000.聪聪有一个机器人从C点出发向在M点的可可移动,去追赶并吃掉可可,在单位时间内,机器人会先朝离可可最近的节点移动1步,如果移动一步机器人并不能吃 ...
- 洛谷4206/NOI2005T4 聪聪和可可 期望DP+记忆化搜索
题意:给出n个点m条边的无向图,两个主角聪聪和可可开始分别在S点和T点.聪聪想吃掉可可,每次由匆匆先行动后来可可行动.聪聪的行动是选他到可可的最短路上的点走最多两步(如果最短路有几条就选编号最小的走) ...
- luogu P4206 [NOI2005]聪聪与可可 期望dp 记忆化搜索
LINK:聪聪与可可 这道题的核心是 想到如何统计答案. 如果设f[i][j]表示第i个时刻... 可以发现还需要统计位置信息 以及上一次到底被抓到没有的东西 不太好做. 两者的位置都在变化 所以需要 ...
随机推荐
- retinex图像增强算法的研究
图像增强方面我共研究了Retinex.暗通道去雾.ACE等算法.其实,它们都是共通的.甚至可以说,Retinex和暗通道去雾就是同一个算法的两个不同视角,而ACE算法又是将Retinex和灰度世界等白 ...
- pycharm2019注册码一键实时获取,永久有效!
pycharm2019专业版激活码 56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2 ...
- 用EXCLE群发outlook邮件
Outlookでメール一括送信する方法(差し込み.HTML形式.添付ファイル複数あり) メールを一括送信する方法はウェブ上にいくつも紹介されていましたが.以下のすべての条件を満たすものが見つからなかっ ...
- 归并排序O(nlogn)
先分治再合并 代码 #include<bits/stdc++.h> using namespace std; #define ll long long int a[1000],t[1000 ...
- 第三周作业(三)---WordCounter
需求是这样的.写出一个程序,模仿wc.exe,可以统计出文件的一些信息(比如字符数.单词数目等等) 对于这个程序,我仍然用我从大一学来的C语言写的. 第一步:打开文件 printf("请输入 ...
- C#【结对编程作业】小学数学习题助手
一.软件成品展示 软件本体下载(包括程序及其更新日志,源码工程包,UML图,API接口文档,算法介绍文档,算式计算excel实例,浅查重程序) 链接: http://pan.baidu.com/s/1 ...
- 20135316Linux内核学习笔记第六周
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 一.进程控制块PCB--task_ ...
- 基于SSH框架的考勤管理系统的设计与实现
基于SSH框架的考勤管理系统的设计与实现
- SRS用例
团队项目:超市管理系统 作者:王琨 个人博客地址:http://www.cnblogs.com/wangkun123 一. 用例视图概述 一般的超市商品管理系统,主要由五大模块组成,即商品信 ...
- 最新广商小助手 项目进展 OpenGL ES 3D在我项目中引用 代码太多只好选重要部分出来
package com.example.home; import java.io.IOException; import java.io.InputStream; import javax.micro ...