bzoj2152: 聪聪可可 点分治
链接
https://www.lydsy.com/JudgeOnline/problem.php?id=2152
luogu爆搜都能过,总时间超过100ms就是写错了
思路
直接mod上面跑点分治就行了,又是模板
代码
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iostream>
using namespace std;
const int N=5e5+7;
const int inf=0x3f3f3f3f;
int read() {
int x=0,f=1;char s=getchar();
for(;s<'0'||s>'9';s=getchar()) if(s=='-') f=-1;
for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';
return x*f;
}
int n,ans;
struct node {
int v,nxt,q;
}e[N<<1];
int head[N<<1],tot;
void add(int u,int v,int w) {
e[++tot].v=v;
e[tot].q=w;
e[tot].nxt=head[u];
head[u]=tot;
}
int rt,rt_val;
int vis[N],siz[N],dis[N];
void get_rt(int u,int f) {
siz[u]=1;
int tmp=0;
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].v;
if(v==f||vis[v]) continue;
get_rt(v,u);
siz[u]+=siz[v];
tmp=max(tmp,siz[v]);
}
tmp=max(tmp,tot-siz[u]);
if(tmp<rt_val) rt_val=tmp,rt=u;
}
int T[5];
void get_dis(int u,int f) {
T[dis[u]]++;
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].v;
if(v==f||vis[v]) continue;
dis[v]=(dis[u]+e[i].q)%3;
get_dis(v,u);
}
}
int q[N];
void calc(int u) {
int a=1,b=0,c=0;
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].v;
if(vis[v]) continue;
dis[v]=e[i].q;
T[0]=T[1]=T[2]=0;
get_dis(v,u);
ans+=a*T[0]+c*T[1]+b*T[2];
a+=T[0],b+=T[1],c+=T[2];
}
}
void dfs(int u) {
vis[u]=1;calc(u);
for(int i=head[u];i;i=e[i].nxt) {
int v=e[i].v;
if(vis[v]) continue;
rt_val=inf;
tot=siz[v],get_rt(v,0);
dfs(rt);
}
}
int main() {
n=read();
for(int i=1;i<n;++i) {
int x=read(),y=read(),z=read()%3;
add(x,y,z);
add(y,x,z);
}
tot=n;
rt_val=inf;
get_rt(1,0);
dfs(rt);
int a=n*n,b=ans*2+n,gcd=__gcd(a,b);
a/=gcd,b/=gcd;
printf("%d/%d",b,a);
return 0;
}
bzoj2152: 聪聪可可 点分治的更多相关文章
- [bzoj2152][聪聪和可可] (点分治+概率)
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
- 【BZOJ2152】聪聪可可(点分治)
[BZOJ2152]聪聪可可(点分治) 题面 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电 ...
- BZOJ2152 [国家集训队] 聪聪可可 [点分治]
题目传送门 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MBSubmit: 5237 Solved: 2750[Submit][Status][Discuss ...
- BZOJ2152 聪聪可可 【点分治】
BZOJ2152 聪聪可可 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问 ...
- BZOJ2152 聪聪可可 (点分治)
2152: 聪聪可可 题意: 在一棵边带权的树中,问任取两个点,这两个点间的权值和是3的倍数的概率. 思路: 经典的点分治题目. 利用点分治在计算所有路径长度,把路径长度对3取模,用t[0],t[1] ...
- BZOJ2152[国家集训队]聪聪可可——点分治
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
- bzoj2152 / P2634 [国家集训队]聪聪可可(点分治)
P2634 [国家集训队]聪聪可可 淀粉质点分治板子 边权直接 mod 3 直接点分治统计出所有的符合条件的点对再和总方案数约分 至于约分.....gcd搞搞就好辣 #include<iostr ...
- 【bzoj2152】聪聪可可 树的点分治
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
- [BZOJ2152]聪聪可可 点分治/树形dp
2152: 聪聪可可 Time Limit: 3 Sec Memory Limit: 259 MB Submit: 3602 Solved: 1858 [Submit][Status][Discu ...
- 【bzoj2152】【聪聪可可】【点分治】
[问题描写叙述] 聪聪和可但是兄弟俩.他们俩常常为了一些琐事打起来,比如家中仅仅剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(但是他们家仅仅有一台电脑)--遇到这样的问题,普通情况下石头剪刀布就好 ...
随机推荐
- Buffer、ArrayBuffer、DataView互转(node.js)
1.Buffer转ArrayBuffer // 实例一 const buf = Buffer.from("this is a test"); console.log(buf); c ...
- JavaScript(六):错误处理机制
1.Error()构造函数 javascript解析或执行语句时,一旦发生错误,js引擎会将其抛出! JavaScript原生提供了Error()构造函数,所有抛出的错误都是这个构造函数的实例(即对象 ...
- Keras中使用LSTM层时设置的units参数是什么
https://www.zhihu.com/question/64470274 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ht ...
- hdu1757 构造矩阵
Lele now is thinking about a simple function f(x). If x < 10 f(x) = x.If x >= 10 f(x) = a0 * f ...
- 20165305 苏振龙《Java程序设计》第八周课上测试补做
1. 下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功截图 2. ...
- 记账本微信小程序开发三
一.制作登陆界面: 更改全局配置,改颜色,名称: 界面 格式 登录界面 二.页面的跳转 按钮的设置 注册事件 结果
- java课上测试心得
放暑假之前,建民老师就给我们布置了每一天学习两小时的代码,但是自己的不重视,根本就没有达到这个要求,简单学了一点点基本的东西,然后在开学的第一堂课上,连续三个小时的敲代码,让我意识到了自己的问题,一个 ...
- 前端框架VUE----导入Bootstrap以及jQuery的两种方式
Vue引入bootstrap主要有两种方法 方法一:在main.js中引入,此方法导入的bootstrap中对于html,body的一些预设置的css样式可能无效. 一.引入jQuery 在当前项目的 ...
- python的ws库功能,实时获取服务器ws协议返回的数据
# -*- coding:utf-8 -*- ''' 模块下载,帮助地址:https://github.com/liris/websocket-client#readme 模块:websocket-c ...
- 框架frame
使用框架切分网页 效果: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...