题意: 给定一个
点,
边的树。
表示编号为
的点构成的联通分量数。
求
。
参考
代码: 传送门
题解: 将点和边单独考虑。初始没有边时,共
个连通分量(连通分量个数为
的
共
个)。每增加一条边
,则对于
的
都会减掉一个连通分量,因为增加了这条边相当于将两个联通分量合二为一了。由于
,故共减少
个连通分量。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int n; cin >> n;
ll res = 0;
for(int i = 1; i <= n; i++) res += 1ll * i * (n - i + 1);
for(int i = 1; i < n; i++) {
int a, b; cin >> a >> b;
if(a > b) swap(a, b);
res -= 1ll * a * (n - b + 1);
}
cout << res << endl;
}