树分治劲啊

原题:

聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃、两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经玩儿腻了这种低智商的游戏。他们的爸爸快被他们的争吵烦死了,所以他发明了一个新游戏:由爸爸在纸上画n个“点”,并用n-1条“边”把这n个“点”恰好连通(其实这就是一棵树)。并且每条“边”上都有一个数。接下来由聪聪和可可分别随即选一个点(当然他们选点时是看不到这棵树的),如果两个点之间所有边上数的和加起来恰好是3的倍数,则判聪聪赢,否则可可赢。聪聪非常爱思考问题,在每次游戏后都会仔细研究这棵树,希望知道对于这张图自己的获胜概率是多少。现请你帮忙求出这个值以验证聪聪的答案是否正确。

n<=20000

恩继续膜拜chty大神的题解

这题个上一题计算方式挺像的,都是树上的路径

这一次用t[0],t[1],t[2]表示路径的权值和%3为0,1,2的方案数,最后的答案就是t[1]*t[2]*2+t[0]*t[0](显然

然后和上一题基本一样,可以继续熟悉树分治的过程

有一点需要注意,getans的时候如果是为了排除在同一个子树上酱紫的不合法的情况,x的前缀和要初始化为本节点和子节点连边的权值y,这个y要么在传参的时候%3,要么就把输入中的所有权值直接%3

建议输入时权值直接%3

代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
int gcd(int x,int y){ return y?gcd(y,x%y):x;}
struct ddd{int y,v;}; vector <ddd> e[];
inline void ist(int x,int y,int z){ e[x].push_back((ddd){y,z});}
int n;
int cnt,rt=,ans=;
int sz[],f[],t[];
bool vst[]; int dst[];
void gtrt(int x,int fa){
sz[x]=,f[x]=;
for(int i=;i<e[x].size();++i)if(!vst[e[x][i].y] && e[x][i].y!=fa){
gtrt(e[x][i].y,x); sz[x]+=sz[e[x][i].y];
f[x]=max(f[x],sz[e[x][i].y]);
}
f[x]=max(f[x],cnt-sz[x]);
if(f[x]<f[rt]) rt=x;
}
void gtdp(int x,int fa){
++t[dst[x]];
for(int i=;i<e[x].size();++i)if(!vst[e[x][i].y] && e[x][i].y!=fa)
dst[e[x][i].y]=(dst[x]+e[x][i].v)%,gtdp(e[x][i].y,x);
}
int gtans(int x,int y){
t[]=t[]=t[]=; dst[x]=y;
gtdp(x,);
return t[]*t[]*+t[]*t[];
}
void ptt(int x){
ans+=gtans(x,); vst[x]=true;
for(int i=;i<e[x].size();++i)if(!vst[e[x][i].y]){
ans-=gtans(e[x][i].y,e[x][i].v);
rt=,gtrt(e[x][i].y,);
ptt(rt);
}
}
int main(){//freopen("ddd.in","r",stdin);
cin>>n;
int l,r,v;
for(int i=;i<n;++i){
l=rd(),r=rd(),v=rd()%;
ist(l,r,v),ist(r,l,v);
}
cnt=n; f[]=n;
gtrt(,),ptt(rt);
int ggcd=gcd(ans,n*n);
cout<<ans/ggcd<<"/"<<n*n/ggcd<<endl;
return ;
}

【NOI2005】 聪聪可可的更多相关文章

  1. 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), ...

  2. 【BZOJ1415】【NOI2005】聪聪和可可(动态规划,数学期望)

    [BZOJ1415][NOI2005]聪聪和可可(动态规划,数学期望) 题面 BZOJ 题解 先预处理出当可可在某个点,聪聪在某个点时 聪聪会往哪里走 然后记忆化搜索一下就好了 #include< ...

  3. 【NOI2005】聪聪和可可 概率与期望 记忆化搜索

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1635  Solved: 958[Submit][Statu ...

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

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

  5. 【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2335  Solved: 1373[Submit][Stat ...

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

    数学期望+记忆化搜索 论文:<浅析竞赛中一类数学期望问题的解决方法>——汤可因  中的第一题…… Orz 黄学长 我实在是太弱,这么简单都yy不出来…… 宽搜预处理有点spfa的感觉= = ...

  7. BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs

    BZOJ_1415_[Noi2005]聪聪和可可_概率DP+bfs Description Input 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2 ...

  8. P4206[NOI2005]聪聪与可可

    链接P4206 [NOI2005]聪聪与可可 类似于开车旅行,如果老鼠确定了那么猫的路线是确定的. 预处理\(g_{i,j}\)表示老鼠在\(i\)号点,猫的下一步方向,\(Bfs\)就行了 设\(f ...

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

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

  10. 【bzoj1415】 Noi2005—聪聪和可可

    http://www.lydsy.com/JudgeOnline/problem.php?id=1415 (题目链接) 题意 一张图,聪聪想吃可可.每单位时间聪聪可以先移动两次:可可后移动一次或停在原 ...

随机推荐

  1. sqlalchemy(一)常用连接参数及包

    简介: 本文默认你已经有了一定的数据库基础.我们不喜欢写原生SQL语句,那个写着费劲,日常开发时候,我们怎么CRUD数据库呢?一般使用ORM,对象关系映射(英语:Object Relational M ...

  2. JXL生成Excel,并提供下载(2:提供下载)

    实现效果: 项目中使用JXL生成Excel,使生成的Excel可以让用户下载,如下图 一.生成Excel 二.提供下载 实现思路: 1.页面使用form表单提交方式(Ajax提交方式,我这里不行) 2 ...

  3. Java:下拉列表绑定后台数据

    后台传进来一个List集合,存着某对象集合,将其显示在下拉列表 一.HTML代码 页面有个下拉列表,如图所示: <td style="width:30%"> <s ...

  4. 二:通过VirtualBox+Vagrant创建一个centos的虚拟机:

    官网安装VirtualBox及Vagrant. 下载centos7,添加到vagrant中. http://e-proxy.yfb.sunline.cn/download/vagrant/centos ...

  5. leetcode python 003

    ## 给定一个字符串,求其最长无重复的子字符串##给定“abcabcbb”,答案是“abc”,长度为3.##给定“bbbbb”,答案是“b”,长度为1.##鉴于“pwwkew”,答案是“wke”,长度 ...

  6. eclipse配置和使用memory Analyse分析内存

    1. 安装 在Eclipse help -> Eclipse Marketplace下搜索Memory:  图 1-1 搜索MAT插件 按照步骤安装完成重启即可. 2. 测试代码准备 测试代码 ...

  7. mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long'

    mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long' 当使用mybatis进行传参的时候 ...

  8. <Redis Advance><Pipelining><Memory Optimization><Expire><Transactions>

    Overview About Redis pipelining About Redis memory optimization About Redis expire About Redis trans ...

  9. L255 Learning to say no brings a thrill of freedom

    I am not sure who came up with that thing about never saying yes to something in the distant future ...

  10. 18-10-15 服务器删除数据的方法【Elasticsearch 数据删除 (delete_by_query 插件安装使用)】方法二没有成功

    rpa 都是5.xx  ueba 分为2.0 或者5.0 上海吴工删除数据的方法 在许多项目中,用户提供的数据存储盘大小有限,在运行一段时间后,大小不够就需要删除历史的 Elasticsearch 数 ...