题目

思路来源
洛谷题解AT_abc173_f Intervals on Tree 题解 - 洛谷专栏
题解
一棵树,考虑加边的过程,加一条边减少一个连通块
那么,逆向这个过程,没删一条边,就多一个连通块
树:点的个数=边的个数+1
森林:点的个数=边的个数+连通块个数
所以,连通块个数=点的个数-边的个数
连通块贡献=点的贡献-边的贡献,然后分开统计

代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans;
signed main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)
ans+=i*(n-i+1);
for(int i=1,x,y;i<n;i++){
cin>>x>>y;
ans-=min(x,y)*(n-max(x,y)+1);
}
cout<<ans;
}

这篇文章介绍了如何通过逆向添加边的过程来计算一棵树中连通块的数量,利用公式连通块个数=点的个数-边的个数,并提供了C++代码实现。题目来源于洛谷题解,主要讨论了树和连通性的关系。
986

被折叠的 条评论
为什么被折叠?



