D题解 | #小红的树上删边#

小红的树上删边

https://ac.nowcoder.com/acm/contest/80743/D

根据题意显然可得,若从一个节点断掉一条边,以这个节点为根节点的子树大小是偶数的话,是不会影响剩余节点的奇偶性的,所以断边等于没断,那么断边其实是不需要我们真正进行操作的

既然切断一棵大小是偶数的子树不会影响剩下的奇偶性,那么我们就进行贪心即可,尽可能多的去切断一棵大小是偶数的子树,所以只要进行一次dfs,每次遇到一棵符合条件(即大小为偶数)的子树就切断它(不需要真的操作,只需要记录“切断”次数)就可以了

但其实这样会额外操作一次,具体可以自己举例子试试,所以我们要最后把操作次数-1(我的代码是直接把计数器初始化为-1)

时间复杂度O(n)

#include <bits/stdc++.h>
 
using LL = long long;
using PII = std::pair<LL, LL>;

const int MOD = 1e9 + 7;

void solve() {
    int n;
    std::cin >> n;

    std::vector<int> size(n + 1, 1);
    std::vector<std::vector<int>> g(n + 1, std::vector<int>()); 
    for(int i = 2; i <= n; i++) {
        int a, b;
        std::cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
    }

    if(n%2) {
        std::cout << -1 << '\n';
        return;
    }

    int res = -1;
    std::function<void(int, int)> dfs = [&](int u, int fa) {
        for(const auto& ver : g[u]) {
            if(ver == fa) continue;
            dfs(ver, u);
            size[u] += size[ver]; //计算子树大小
        }
        
        if(size[u]%2 == 0) res++; //若子树大小为偶数就切断
    };
    std::cout << res << '\n';
}
  
int main() {
    std::ios::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);
     
    int T = 1;
    //std::cin >> T;
    while (T--) solve();
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4096次浏览 29人参与
# 你觉得mentor喜欢什么样的实习生 #
10394次浏览 288人参与
# 未岚大陆求职进展汇总 #
23850次浏览 113人参与
# 帮我看看,领导说这话什么意思? #
6307次浏览 26人参与
# 没有家庭托举的我是怎么找工作的 #
12412次浏览 158人参与
# 怎么给家人解释你的工作? #
1425次浏览 16人参与
# 平安产险科技校招 #
2412次浏览 0人参与
# 求职低谷期你是怎么度过的 #
5263次浏览 92人参与
# 26届秋招公司红黑榜 #
12326次浏览 43人参与
# 从哪些方向判断这个offer值不值得去? #
6600次浏览 93人参与
# 同bg的你秋招战况如何? #
158823次浏览 927人参与
# 度小满求职进展汇总 #
10109次浏览 51人参与
# 实习必须要去大厂吗? #
146666次浏览 1541人参与
# 校招泡的最久的公司是哪家? #
4626次浏览 22人参与
# 你有哪些缓解焦虑的方法? #
37177次浏览 835人参与
# 面试紧张时你会有什么表现? #
1705次浏览 21人参与
# 你喜欢工作还是上学 #
77583次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85482次浏览 467人参与
# 秋招想进国企该如何准备 #
97710次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103582次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25034次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28126次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务