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> ...
随机推荐
- jq中的evet.target
1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素: 2.this和event.t ...
- MySQL架构优化:定时计划任务与表分区
转自: MySQL架构优化实战系列3:定时计划任务与表分区 - 今日头条(TouTiao.com)http://toutiao.com/a6304736482361049345/?tt_from=mo ...
- 使用cisco SDM管理路由器
实验拓扑: 实验目的:掌握如何通过SDM对路由器进行管理 实验需求:设置R1使其能够通过SDM进行管理 实验步骤: 步骤一:配置基本IP地址 步骤二:在R1上进行设置,使其能够通过SDM连接 R1(c ...
- 利用id来进行树状数组,而不是离散化以后的val HDU 4417 离线+树状数组
题目大意:给你一个长度为n的数组,问[L,R]之间<=val的个数 思路:就像标题说的那样就行了.树状数组不一定是离散化以后的区间,而可以是id //看看会不会爆int!数组会不会少了一维! / ...
- C# 经典入门15章 RadioButton和CheckBox
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAswAAAF6CAIAAACCyJm4AAAgAElEQVR4nOyd91sTzdrH379kEyD0Hk
- 10、end关键字和Fibonacci series: 斐波纳契数列
# Fibonacci series: 斐波纳契数列 # 两个元素的总和确定了下一个数 a, b = 0, 1 #复合赋值表达式,a,b同时赋值0和1 while b < 10: print(b ...
- C# 开发技巧]如何防止程序多次运行 线程 进程
程序员必有一些好习惯,我的就是看到好文章就收下 文章来源 http://www.cnblogs.com/zhili/p/OnlyInstance.html 转载请注明出处 最近发现很多人在论坛中问 ...
- 基于Verilog HDL 的数字时钟设计
基于Verilog HDL的数字时钟设计 一.实验内容: 利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...
- 二部图(二分图判定--dfs)
题目链接:二部图 二部图 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 二 部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图 ...
- jsp设置footer底部内容
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...