zoukankan      html  css  js  c++  java
  • GYM-100199C New Year Bonus Grant 贪心,树

    GYM-100199C New Year Bonus Grant 贪心,树

    题意

    本人英文能力有限,一开始甚至没有读懂题目。

    归纳以后题意大致如下:

    给出一棵树,对这棵树进行染色:

    如果一个点被染色,那么它的父亲儿子兄弟结点都不能再染色。

    问最多能染哪些。

    分析

    一开始想复杂了,在往树形DP方面想,但最后打印方案这一步没想出来。

    后来发现贪心的选即可。

    而且题中给定了上司的结点编号一定比下属的结点编码大,这样就更方便处理了。

    思路就是贪心的从叶子节点网上选。如果可以选就选。

    简要证明就是选叶子必然比选其他好,因为一旦选其他结点,会导致更多的点不能被选。

    int fa[maxn];
    bool vis[maxn];
    vector<int> res;
    
    int main() {
        freopen("grant.in", "r", stdin);
        freopen("grant.out", "w", stdout);
        int n = readint();
        for (int i = 0; i < n - 1; i++) {
            int x = readint();
            fa[i + 2] = x;
        }
        for (int i = n; i >= 2; i--)
            if (!vis[fa[i]] && !vis[i])
                vis[fa[i]] = vis[i] = 1, res.push_back(i);
        sort(res.begin(), res.end());
        printf("%lld
    ", 1000 * (ll)res.size());
        for (int i = 0; i < res.size() - 1; i++) {
            printf("%d ", res[i]);
        }
        printf("%d", res.back());
    }
    
  • 相关阅读:
    while循环和递归
    ASP.NET Core Swagger 显示接口注释
    ABP依赖注入
    EF Core 笔记
    .NET Core 管道过滤器扩展
    ABP权限认证
    552 you must authentication
    C# 多线程写文件,时常写不成功
    .Net 的一些插件
    多线程下HttpContext.Current 的问题
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13720502.html
Copyright © 2011-2022 走看看