bzoj2152
题解:
随便点分治,用一个t数组,t[i]代表有u到root的值mod3==i; 那么答案就是:t[0]*t[0]+t[1]*t[2]*2;
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 20005
using namespace std;
int pre[N*],now[N],v[N*],val[N*];
int d[N],son[N],f[N];
int t[];
bool vis[N];
int tot,all,n,ans,root;
int read()
{
int x=; char ch; bool bo=;
while (ch=getchar(), ch<''||ch>'') if (ch=='-') bo=;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='');
if (bo) return -x; return x;
}
void ins(int a,int b,int c)
{
++tot; pre[tot]=now[a]; now[a]=tot; v[tot]=b; val[tot]=c;
}
int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
}
void getroot(int u,int fa)
{
son[u]=; f[u]=;
for (int p=now[u]; p; p=pre[p])
{
int vv=v[p];
if (vv==fa || vis[vv]) continue;
getroot(vv,u); son[u]+=son[vv];
f[u]=max(f[u],son[vv]);
}
f[u]=max(f[u],all-son[u]);
if (f[u]<f[root]) root=u;
}
void getarray(int u,int fa)
{
t[d[u]]++;
for (int p=now[u]; p; p=pre[p])
{
int vv=v[p];
if (vv==fa||vis[vv]) continue;
d[vv]=(d[u]+val[p])%;
getarray(vv,u);
}
}
int calc(int u,int value)
{
t[]=t[]=t[]=; d[u]=value;
getarray(u,);
return t[]*t[]+t[]*t[]*;
}
void solve(int u)
{
ans+=calc(u,); vis[u]=;
for (int p=now[u]; p; p=pre[p])
{
int vv=v[p];
if (vis[vv]) continue;
ans-=calc(vv,val[p]);
root=; all=son[vv];
getroot(vv,);
solve(root);
}
}
int main()
{
n=read();
for (int i=; i<n; i++)
{
int a=read(),b=read(),val=read()%;
ins(a,b,val); ins(b,a,val);
}
ans=;
f[root=]=all=n; getroot(,);
solve(root);
int kk=gcd(ans,n*n);
printf("%d/%d\n",ans/kk,n*n/kk);
}
bzoj2152的更多相关文章
- 【bzoj2152】 聪聪可可
http://www.lydsy.com/JudgeOnline/problem.php?id=2152 (题目链接) 题意 给出一棵n个节点的带权树,求有多少点对的距离是3的倍数. solution ...
- poj1741 bzoj2152
树分治入门 poj1741是男人八题之一,经典的树分治的题目这里用到的是点分治核心思想是我们把某个点i作为根,把路径分为过点i和不过点i先统计过点i这样的路径数,然后在统计其子树中的答案,这样就不断地 ...
- 【BZOJ2152】聪聪可可(点分治)
[BZOJ2152]聪聪可可(点分治) 题面 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电 ...
- BZOJ2152 [国家集训队] 聪聪可可 [点分治]
题目传送门 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 5237 Solved: 2750[Submit][Status][Discuss ...
- BZOJ2152 聪聪可可 【点分治】
BZOJ2152 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问 ...
- 【bzoj2152】聪聪可可 点分治
[bzoj2152]聪聪可可 2014年9月7日3,5472 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是 ...
- BZOJ2152 聪聪可可 (点分治)
2152: 聪聪可可 题意: 在一棵边带权的树中,问任取两个点,这两个点间的权值和是3的倍数的概率. 思路: 经典的点分治题目. 利用点分治在计算所有路径长度,把路径长度对3取模,用t[0],t[1] ...
- [bzoj2152][聪聪和可可] (点分治+概率)
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
- [BZOJ2152]聪聪可可(点分治)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2152 分析:裸的点分治,对于每课树,记录t[0],t[1],t[2]表示到当前根节点距 ...
- BZOJ2152:聪聪可可
传送门 点分治常规题.练习模板 //OJ 2077 //by Cydiater //2016.9.23 #include <iostream> #include <cstdio> ...
随机推荐
- Oracle数据库设计小细节
1. 如果使用PowerDesigner此类工具,注意将工具的导出的SQL语句中对于表的双引号去掉. 2. 建表和建字段的时候,不同单词之间使用下划线分隔,比如 REC_ID 3. Oracle中数值 ...
- 使用命令将logcat中的内容输出到文本文件中
网上搜集的方法,自己只是试了一下第一种,很好用,如果是/mylogcat.txt 直接保存在了d盘,我猜是直接保存在了sdk所在的盘的根目录下,希望对大家有帮助 使用如下命令可以将logcat中的内容 ...
- linux下GBK->UTF-8文件编码批量转换脚本
find default -type d -exec mkdir -p utf/{} \;find default -type f -exec iconv -f GBK -t UTF-8 {} -o ...
- java网络之udp
import java.net.*; /** * InetAddress用法 * 获取本地主机名,ip * 通过主机名,ip获取InetAddress对象 */ public class Demo{ ...
- cakephp , the subquery (2)
Cakephp 框架帮我们做了很多的工作,的确省了我们很多工作,提高了效率. 但是,碰到一些比较复杂的查询时,还是有些问题,官方的cookbook api 有说明一些详细的用法,但感觉还是不太够,有些 ...
- 转:LoadRunner自带的协议分析工具
在做性能测试的时候,协议分析是困扰初学者的难题,不过优秀的第三方协议分析工具还是挺多的,如:MiniSniffer .Wireshark .Ominpeek 等:当然他们除了帮你分析协议之外,还提供其 ...
- CSS3的background-size
DEMO一.background-size:auto; 我来看第一个DEMO,在前面的DEMO上加上和个class名为"backgroundSizeAuto",在这个Demo上我们 ...
- JQuery操作DOM对象
1.追加节点( 儿子关系) append() $("已有元素").append("动态添加元素"); 在已有元素的内部的后面追加一个元素 append ...
- 鼠标滚轮事件 onmousewheel
1.fiefox:DOMMouseScroll detail detail*(-40)=wheelDelta 除了firefox之外:mousewheel ...
- php 语法中有 let 吗?
来源:http://stackoverflow.com/questions/9705281/with-and-let-in-php use(&$a) 用 use ($parameter) 这种 ...