每日一题 4.15 Treepath

Treepath

https://ac.nowcoder.com/acm/problem/14248

这是一个简单的dfs
偶数=偶数+偶数或者奇数+奇数 所有我们只用统计深度为奇数或者偶数的个数
答案为 奇数或者偶数任取两个 即(ans1(ans1-1)/2)+(ans2(ans2-1)/2)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
int head[N],nex[N<<1],to[N<<1],tot;
int n,h[N];
ll ans1,ans2;
void add(int a,int b){
    to[++tot]=b; nex[tot]=head[a]; head[a]=tot;
}

void dfs(int x,int fa){
    h[x]=h[fa]+1;
    if(h[x]&1) ans1++;
    else ans2++;
    for(int i=head[x];i;i=nex[i]){
        if(to[i]!=fa) dfs(to[i],x);
    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<n;i++){
        int x,y;    scanf("%d %d",&x,&y);    add(x,y);    add(y,x);
    }
    dfs(1,0);
    cout<<(ans1*(ans1-1)/2)+(ans2*(ans2-1)/2)<<endl;
    return 0;
}
每日一题题解 文章被收录于专栏

每日一题题解的汇集

全部评论

相关推荐

白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务