【每日一题】旅游

旅游

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

题意:



思路:






#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 5e5 + 10;
struct Node{
    int to,nex;
}e[N << 1];
int n,s,head[N],idx;
int dp[N][2];
void add_edge(int u,int v){
    e[idx].to = v;
    e[idx].nex = head[u];
    head[u] = idx++;
}
void dfs(int u,int fa){
    dp[u][1] = 1;
    for(int i = head[u];~i;i = e[i].nex){
        int v = e[i].to;
        if(v == fa) continue;
        dfs(v,u);
        dp[u][0] += max(dp[v][1],dp[v][0]);
        dp[u][1] += dp[v][0];
    }
}
int main(){
    memset(head,-1,sizeof(head));
    scanf("%d%d",&n,&s);
    for(int i = 1,u,v;i < n;i++){
        scanf("%d%d",&u,&v);
        add_edge(u,v);
        add_edge(v,u);
    }
    dfs(s,-1);
    printf("%d\n",dp[s][1]);
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 15:19
简历上能写3个月吗?
码农索隆:大胆写,主要你能把实习经历包装好,可以看一下我这篇帖子https://www.nowcoder.com/share/jump/4888395581180798063
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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