bzoj2152 聪聪可可

题目描述

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

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

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

输入输出格式

输入格式:

 

输入的第1行包含1个正整数n。后面n-1行,每行3个整数x、y、w,表示x号点和y号点之间有一条边,上面的数是w。

 

输出格式:

 

以即约分数形式输出这个概率(即“a/b”的形式,其中a和b必须互质。如果概率为1,输出“1/1”)。

 

输入输出样例

输入样例#1: 复制
5
1 2 1
1 3 2
1 4 1
2 5 3
输出样例#1: 复制
13/25

说明

【样例说明】

13组点对分别是(1,1) (2,2) (2,3) (2,5) (3,2) (3,3) (3,4) (3,5) (4,3) (4,4) (5,2) (5,3) (5,5)。

【数据规模】

对于100%的数据,n<=20000。

题解

  然后从今天开始学习点分

  这应该算是个板子?

  先用点分计算出路径长度,把路径长度对$%3$,然后用$sum[1],sum[2],sum[0]$表示模数是$1,2,3$的情况的总数,那么就是$ans+=sum[1]*sum[2]*2+sum[0]*sum[0]$,最后答案就是$ans/(n*n)$

  

 1 //minamoto
 2 #include<iostream>
 3 #include<cstdio>
 4 #define ll long long
 5 #define inf 0x3f3f3f3f
 6 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
 7 char buf[1<<21],*p1=buf,*p2=buf;
 8 template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
 9 inline int read(){
10     #define num ch-'0'
11     char ch;bool flag=0;int res;
12     while(!isdigit(ch=getc()))
13     (ch=='-')&&(flag=true);
14     for(res=num;isdigit(ch=getc());res=res*10+num);
15     (flag)&&(res=-res);
16     #undef num
17     return res;
18 }
19 char sr[1<<21],z[20];int C=-1,Z;
20 inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
21 inline void print(int x){
22     if(C>1<<20)Ot();if(x<0)sr[++C]=45,x=-x;
23     while(z[++Z]=x%10+48,x/=10);
24     while(sr[++C]=z[Z],--Z);
25 }
26 const int N=20005,mod=3;
27 int head[N],Next[N<<1],edge[N<<1],ver[N<<1];ll ans=0;
28 int sz[N],son[N],sum[4],vis[N];
29 int size,mx,rt,n,tot;
30 inline void add(int u,int v,int e){
31     ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
32     ver[++tot]=u,Next[tot]=head[v],head[v]=tot,edge[tot]=e;
33 }
34 void getrt(int u,int fa){
35     sz[u]=1,son[u]=0;
36     for(int i=head[u];i;i=Next[i]){
37         int v=ver[i];
38         if(vis[v]||v==fa) continue;
39         getrt(v,u);
40         sz[u]+=sz[v];
41         cmax(son[u],sz[v]);
42     }
43     cmax(son[u],size-sz[u]);
44     if(son[u]<mx) mx=son[u],rt=u;
45 }
46 void query(int u,int fa,int d){
47     ++sum[d%mod];
48     for(int i=head[u];i;i=Next[i]){
49         int v=ver[i];
50         if(vis[v]||v==fa) continue;
51         query(v,u,(d+edge[i])%mod);
52     }
53 }
54 ll solve(int rt,int d){
55     sum[0]=sum[1]=sum[2]=0;
56     query(rt,0,d);
57     ll res=1ll*sum[1]*sum[2]*2+1ll*sum[0]*sum[0];
58     return res;
59 }
60 void divide(int u){
61     ans+=solve(u,0);
62     vis[u]=1;
63     for(int i=head[u];i;i=Next[i]){
64         int v=ver[i];
65         if(vis[v]) continue;
66         ans-=solve(v,edge[i]);
67         mx=inf,rt=0,size=sz[v];
68         getrt(v,0);
69         divide(rt);
70     }
71 }
72 inline ll gcd(ll a,ll b){
73     while(b^=a^=b^=a%=b);
74     return a;
75 }
76 int main(){
77     n=read();
78     for(int i=1;i<n;++i){
79         int u=read(),v=read(),e=read();
80         add(u,v,e%3);
81     }
82     mx=inf,size=n,ans=0,rt=0;
83     getrt(1,0),divide(rt);
84     ll p=n*n,GCD=gcd(ans,p);
85     print(ans/GCD),sr[++C]='/',print(p/GCD);
86     Ot();
87     return 0;
88 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9476329.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七、 面向对象(二)

匿名类对象 创建的类的对象是匿名的。当我们只需要一次调用类的对象时&#xff0c;我们就可以考虑使用匿名的方式创建类的对象。特点是创建的匿名类的对象只能够调用一次&#xff01; package day007;//圆的面积 class circle {double radius;public double getArea() {// TODO…

机器学习 客户流失_通过机器学习预测流失

机器学习 客户流失介绍 (Introduction) This article is part of a project for Udacity “Become a Data Scientist Nano Degree”. The Jupyter Notebook with the code for this project can be downloaded from GitHub.本文是Udacity“成为数据科学家纳米学位”项目的一部分…

2044. 统计按位或能得到最大值的子集数目

2044. 统计按位或能得到最大值的子集数目 给你一个整数数组 nums &#xff0c;请你找出 nums 子集 按位或 可能得到的 最大值 &#xff0c;并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素&#xff08;或不删除&#xff09;得到&…

redis系列:分布式锁

1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始&#xff0c;然后根据问题进行调整&#xff0c;最后完成一个较为合理的分布式锁。 本篇文章会将分布式锁的实现分为两部分&#xff0c;一个是单机环境&#xff0c;另一个是集群环境下的Redis…

Qt中的坐标系统

转载&#xff1a;原野追逐 Qt使用统一的坐标系统来定位窗口部件的位置和大小。 以屏幕的左上角为原点即(0, 0)点&#xff0c;从左向右为x轴正向&#xff0c;从上向下为y轴正向&#xff0c;这整个屏幕的坐标系统就用来定位顶层窗口&#xff1b; 此外&#xff0c;窗口内部也有自己…

预测股票价格 模型_建立有马模型来预测股票价格

预测股票价格 模型前言 (Preface) If you are reading this, it’s most likely because you love to solve puzzles. I’m a very competitive person by nature. The Mt. Everest of puzzles, in my opinion, is trying to find excess returns through active trading in th…

Python 模块 timedatetime

time & datetime 模块 在平常的代码中&#xff0c;我们常常需要与时间打交道。在Python中&#xff0c;与时间处理有关的模块就包括&#xff1a;time&#xff0c;datetime,calendar(很少用&#xff0c;不讲)&#xff0c;下面分别来介绍。 在开始之前&#xff0c;首先要说明几…

大数模板Java

import java.util.*; import java.math.BigInteger; public class Main{public static void main(String args[]){Scanner cinnew Scanner(System.in);BigInteger a,b;acin.nextBigInteger();bcin.nextBigInteger();System.out.println(a.add(b));//加法System.out.println(a.…

柠檬工会_工会经营者

柠檬工会Hey guys! This week we’ll be going over some ways to work with result sets in MySQL. These result sets are the outputs of your everyday queries, such as:大家好&#xff01; 本周&#xff0c;我们将介绍一些在MySQL中处理结果集的方法。 这些结果集是您日常…

229. 求众数 II

229. 求众数 II 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 示例 1&#xff1a;输入&#xff1a;[3,2,3] 输出&#xff1a;[3]示例 2&#xff1a;输入&#xff1a;nums [1] 输出&#xff1a;[1]示例 3&#xff1a;输入&#xff1a;…

写给Java开发者看的JavaScript对象机制

帮助面向对象开发者理解关于JavaScript对象机制 本文是以一个熟悉OO语言的开发者视角&#xff0c;来解释JavaScript中的对象。 对于不了解JavaScript 语言&#xff0c;尤其是习惯了OO语言的开发者来说&#xff0c;由于语法上些许的相似会让人产生心理预期&#xff0c;JavaScrip…

Pythonic---------详细讲解

作者&#xff1a;半载流殇 链接&#xff1a;https://zhuanlan.zhihu.com/p/35219750 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。Pythonic&#xff0c;简言之就是以Python这门语言独特的方式写出既简洁又优美的代码…

大数据ab 测试_在真实数据上进行AB测试应用程序

大数据ab 测试Hello Everyone!大家好&#xff01; I am back with another article about Data Science. In this article, I will write about what is A-B testing and how to use it on real life data-set to compare two advertisement methods.我回来了另一篇有关数据科…

492. 构造矩形

492. 构造矩形 作为一位web开发者&#xff0c; 懂得怎样去规划一个页面的尺寸是很重要的。 现给定一个具体的矩形页面面积&#xff0c;你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求&#xff1a; 你设计的矩形页面必须等于给定的目标面积。 宽度 …

node:爬虫爬取网页图片

前言 周末自己在家闲着没事&#xff0c;刷着微信&#xff0c;玩着手机&#xff0c;发现自己的微信头像该换了&#xff0c;就去网上找了一下头像&#xff0c;看着图片&#xff0c;自己就想着作为一个码农&#xff0c;可以把这些图片都爬取下来做成一个微信小程序&#xff0c;说干…

如何更好的掌握一个知识点_如何成为一个更好的讲故事的人3个关键点

如何更好的掌握一个知识点You’re launching a digital transformation initiative in the middle of the ongoing pandemic. You are pretty excited about this big-ticket investment, which has the potential to solve remote-work challenges that your organization fac…

centos 搭建jenkins+git+maven

gitmavenjenkins持续集成搭建发布人:[李源] 2017-12-08 04:33:37 一、搭建说明 系统&#xff1a;centos 6.5 jdk&#xff1a;1.8.0_144 jenkins&#xff1a;jenkins-2.93-1.1 git&#xff1a;git-2.9.0 maven&#xff1a;Maven 3.3.9 二、部署 2.1、jdk安装 1&#xff09;下…

638. 大礼包

638. 大礼包 在 LeetCode 商店中&#xff0c; 有 n 件在售的物品。每件物品都有对应的价格。然而&#xff0c;也有一些大礼包&#xff0c;每个大礼包以优惠的价格捆绑销售一组物品。 给你一个整数数组 price 表示物品价格&#xff0c;其中 price[i] 是第 i 件物品的价格。另有…

记录一次spark连接mysql遇到的问题

在使用spark连接mysql的过程中报错了&#xff0c;错误如下 08:51:32.495 [main] ERROR - Error loading factory org.apache.calcite.jdbc.CalciteJdbc41Factory java.lang.NoClassDefFoundError: org/apache/calcite/linq4j/QueryProviderat java.lang.ClassLoader.defineCla…

什么事数据科学_如果您想进入数据科学,则必须知道的7件事

什么事数据科学No way. No freaking way to enter data science any time soon…That is exactly what I thought a year back.没门。 很快就不会出现进入数据科学的怪异方式 ……这正是我一年前的想法。 A little bit about my data science story: I am a complete beginner…