[每日一题]:Wannafly挑战赛1 -- Treepath
题目:
考察点:
树上DFS、long long、思维
侃侃:
之前做过一道类似的题目,所以想到应该往哪个方向去想。
Code:
#include <vector>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn = 1e5 + 10;
vector<int>G[maxn];
int deep[maxn],n;
int u,v;
void DFS(int u,int fa) {
for(int i = 0; i < G[u].size(); i ++) {
int v = G[u][i];
if(v != fa) {
deep[v] = deep[u] + 1;
DFS(v,u);
}
}
return ;
}
int main(void) {
scanf("%d",&n);
for(int i = 1; i < n; i ++) {
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}
DFS(1,-1);
LL ne = 0,pos = 0;
LL res = 0;
for(int i = 2; i <= n; i ++) {
if(deep[i] & 1) ne ++;
else {
pos ++;
res ++;
}
}
res += (ne * (ne - 1)) / 2 + (pos * (pos - 1)) / 2;
printf("%lld\n",res);
return 0;
}
后记:
哈哈,虽然跟之前做过的一道题类似,不过自己写出来AC还是比较开心的,听说这道题是树形DP
的简单题,菜菜的我见到 DP 就 凉凉,先好好打好基础,加油!
如果说年轻人未来是一场盛宴的话,那么我首先要有赴宴的资格。