洛谷P2634 [国家集训队]聪聪可可(点分治)
题意:
给出一颗树,每条边都有一定的边权。
先问点之间路径和为\(3\)的倍数的点对有多少。
思路:
点分治模板题。
可以将问题转化为经过一个点\(t\)的路径和不经过点\(t\)的路径两种情况,后者可以直接递归处理。
在一个子问题中,\(dfs\)一遍处理出根结点到其余子树中所有点的距离,然后得到距离除以3的余数,根据余数来选即可。
注意还要容斥一下,因为可能选择的两个点有重复边。
反正就很模板~
#include <bits/stdc++.h>
#define MP make_pair
#define fi first
#define se second
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int N = 20005;
int n;
vector <pii> g[N];
int sz[N], mx[N], tsz;
int d[N];
int rt, ans, cnt;
bool vis[N];
void getrt(int u, int fa) {
sz[u] = 1; mx[u] = 0;
for(auto it : g[u]) {
int v = it.fi;
if(v == fa || vis[v]) continue;
getrt(v, u);
sz[u] += sz[v];
if(sz[v] > mx[u]) mx[u] = sz[v];
}
mx[u] = max(mx[u], tsz - sz[u]);
if(mx[u] < mx[rt]) rt = u;
}
void dfs2(int u, int D, int fa) {
d[++cnt] = D;
for(auto it : g[u]) {
int v = it.fi, w = it.se;
if(vis[v] || v == fa) continue;
dfs2(v, D + w, u);
}
}
int calc() {
for(int i = 1; i <= cnt; i++) d[i] %= 3;
int tmp[3] = {0, 0, 0};
for(int i = 1; i <= cnt; i++) ++tmp[d[i]];
int ans = tmp[0] * (tmp[0] - 1) + 2 * (tmp[1] * tmp[2]);
return ans;
}
void dfs(int u) {
vis[u] = 1;
cnt = 0; dfs2(u, 0, 0);
int tmp = calc();
ans += tmp;
for(auto it : g[u]) {
int v = it.fi, w = it.se;
if(vis[v]) continue;
cnt = 0, dfs2(v, w, 0);
ans -= calc();
tsz = sz[v], rt = 0, getrt(v, u);
dfs(rt);
}
}
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
for(int i = 1; i < n; i++) {
int u, v, w; cin >> u >> v >> w;
g[u].push_back(MP(v, w)); g[v].push_back(MP(u, w));
}
tsz = n, mx[0] = INF, getrt(1, 0);
dfs(rt);
ans += n;
int tot = n * n;
int g = gcd(tot, ans);
ans /= g, tot /= g;
cout << ans << '/' << tot;
return 0;
}
洛谷P2634 [国家集训队]聪聪可可(点分治)的更多相关文章
- 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)
洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...
- 洛谷 P2634 [国家集训队]聪聪可可 解题报告
P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一 ...
- 洛谷 P2634 [国家集训队]聪聪可可-树分治(点分治,容斥版) +读入挂+手动O2优化吸点氧才过。。。-树上路径为3的倍数的路径数量
P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一 ...
- 洛谷P2634 [国家集训队]聪聪可可 (点分治)
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
- 洛谷-P2634 [国家集训队]聪聪可可 点分治
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
- [洛谷P2634][国家集训队]聪聪可可
题目大意:给你一棵树,随机选两个点,求它们之间路径长度是$3$的倍数的概率 题解:点分治,求出当前状态的重心,然后求出经过重心的答案,接着分治每棵子树.注意考虑重复计算的情况 卡点:无 C++ Cod ...
- 洛谷 P2634 [国家集训队]聪聪可可
点分板子2333 注释都是错过的地方 #include<cstdio> #include<algorithm> using namespace std; typedef lon ...
- 洛谷P2634 [国家集训队]聪聪可可 点分治模板
题意 在一棵树上任意选两个点,求它们距离模3为0的概率. 分析 树分治模板 Code #include<bits/stdc++.h> #define fi first #define se ...
- 洛谷 P2634 BZOJ 2152 【模板】点分治(聪聪可可)
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
随机推荐
- JS判断是否是ioS或者Android
每个客户端都带有自身的UA标识,通过JavaScript,可以获取客户端标识,我们可以获取浏览器的userAgent,用正则来判断手机是ios(苹果)还是Android(安卓)客户端. 项目实例:ht ...
- 爬虫,爬取景点信息采用pandas整理数据
一.首先需要导入我们的库函数 导语:通过看网上直播学习得到,如有雷同纯属巧合. import requests#请求网页链接import pandas as pd#建立数据模型from bs4 imp ...
- [LeetCode] 236. Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- dogcom在openwrt上的使用
前提,先配置并运行mentohust(作为802.1x认证) 1,取得编译完成的可执行文件(可先在虚拟机里测试) 2,上传到路由器 3,把dogcom主程序和配置文件放在/etc/storage/do ...
- 《Interest Rate Risk Modeling》阅读笔记——第五章:久期向量模型
目录 第五章:久期向量模型 思维导图 久期向量的推导 久期向量 广义久期向量 一些想法 第五章:久期向量模型 思维导图 久期向量的推导 \[ V_0 = \sum_{t=t_1}^{t_n} CF_t ...
- DHT11温湿度传感器模块使用方法和驱动代码实现
DHT11模块简介 DHT11是一款价格便宜,易于使用的温度湿度测量二合一传感器.它具有超小体积.极低功耗的特点.它使用单根总线与单片机进行双向的串行数据传输,信号传输距离可达20米以上.非常适用于对 ...
- springboot指定注解扫描范围
springboot注解扫描范围是由@ComponentScan指定的;默认情况下为启动程序所在目录及其子包; 如果需要指定扫描路径,在启动程序中添加修改 @ComponentScan(basePac ...
- [转] JavaScript数组去重(12种方法)
数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码.如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看.在真实的项目中碰到的数组去重,一般都是 ...
- 配置ssl使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH
使用了不受支持的协议. ERR_SSL_VERSION_OR_CIPHER_MISMATCH 协议不受支持 客户端和服务器不支持一般 SSL 协议版本或加密套件. 类似的这种提示 免费版百度云 ...
- java 获取真实ip地址
/** * 获取真实ip地址 * @param request * @return */ public static String getIpAddress(HttpServletRequest re ...