当前位置:网站首页>三角果计数
三角果计数
2022-08-09 00:12:00 【朴小明】
给一个n个节点的树, 三角果定义为一个包含3个节点的集合, 且他们两两之间的最短路长度a, b, c能够构成一个三角形。
做法:
和边权没什么关系,画画图发现一条链上所有点都不符合条件,得从这条链上有一个分支,才可以构成合法的。
枚举每个点作为下面这样子的中心节点:这里2是中心节点。
1
|
2
/ \
3 4
接下来是计数,假设先选上中心的上面的某个点,还有两个点在下面选;然后是三个点都在下面选。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6, mod = 998244353;
vector<int> v[N];
int sum[N];
int ans;
int n;
void dfs(int x, int fa)
{
sum[x] = 1;
for (auto i : v[x])
{
int y = i;
if (y == fa) continue;
dfs(y, x);
sum[x] += sum[y];
}
int num = sum[x] - 1;
for (auto i : v[x])
{
int y = i;
if (y == fa) continue;
ans += sum[y] * (num - sum[y]) * (n - sum[x]);
num -= sum[y];
}
num = sum[x] - 1;
int sum1 = 0;
for (auto i : v[x])
{
int y = i;
if (y == fa) continue;
ans += sum1 * sum[y] * (num - sum1 - sum[y]);
sum1 += sum[y];
}
}
signed main ()
{
cin >> n;
for (int i = 1; i <= n - 1; i++){
int x, y, z;
scanf("%lld%lld%lld", &x, &y, &z);
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1, 0);
cout << ans;
return 0;
}
边栏推荐
猜你喜欢
随机推荐
GRPC学习(An RPC library and framework)
如何使用加密套件?
穿越派如何续购相关产品功能
如何使用WebDAV?
The difference between MVC and MVP
数据机构-哈夫曼树
遇到一个STM32中断的坑,记录一下(和NVIC的抢占位设置有关)
Mysql Workbench uses .sql file to import data into database
穿越派套餐说明
2021ccpc网络选拔赛
STM32的HAL库初体会
VsCode配置自己喜欢的字体,背景,妈妈再也不担心我写代码枯燥了
整流八--电网不平衡状态下三相PWM整流器的控制策略
C#一些简单的知识
There is quality when someone is in charge: to a generation lost in the market place
最新7篇数据科学/深度学习/CNN/知识图谱/文本匹配等中英文综述论文推介(附下载)
《MySQL入门很轻松》第3章:数据库的创建与操作
牛客练习赛87
移动web开发-布局篇
穿越派·派盘V3.14发版啦!