zoukankan      html  css  js  c++  java
  • HackerRank

    Typical greedy ecursion algorithm.

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    #include <unordered_set>
    using namespace std;
    
    struct Node
    {
        Node() : pinx(0), nodeCnt(0){};
        int pinx;
        unordered_set<int> c;
        int nodeCnt;
    };
    
    void countNode(vector<Node> &in, int rinx)
    {
        if (in[rinx].c.empty())
        {
            in[rinx].nodeCnt = 1;
            return;
        }
    
        for (auto &i : in[rinx].c)
        {
            countNode(in, i);
            in[rinx].nodeCnt += in[i].nodeCnt;
        }
        in[rinx].nodeCnt += 1;
    }
    
    int cut(vector<Node> &in, int rinx, int rr)
    {
        int cnt = 0;
        vector<int> removed;
        for (auto i : in[rinx].c)
        {
            if (in[i].nodeCnt % 2 == 0) 
            {
                cnt++;
                in[rinx].nodeCnt -= in[i].nodeCnt;
                removed.push_back(i);
                cnt += cut(in, i, rr);
            }
            else
                cnt += cut(in, i, rr);
        }
        for (auto i : removed)
        {
            in[rinx].c.erase(i);
        }
    
        if (cnt > 0)
        {
            cnt += cut(in, rinx, rr);
        }
        return cnt;
    }
    
    int main() {
        int n, m; cin >> n >> m;
        vector<Node> nodes(n);
        
        //    Build tree
        unordered_set<int> hs;
        for (int i = 1; i <= n; i++)
            hs.insert(i);
    
        while (m--)
        {
            int a, b; cin >> a >> b;
            if (hs.find(a) != hs.end())
                hs.erase(a);
            nodes[b - 1].c.insert(a - 1);
            nodes[a - 1].pinx = b - 1;
        }
        int rinx = *hs.begin() - 1;
    
        //    Count
        countNode(nodes, rinx);
        int ret = cut(nodes, rinx, rinx);
        cout << ret << endl;
        return 0;
    }
  • 相关阅读:
    高质量c/c++编程(10)
    .net 访问excel问题
    高质量c/c++编程(9)
    C#排序算法 之 冒泡排序
    C#排序算法 之 希尔排序
    高质量c/c++编程附录
    C#排序算法 之 插入排序
    读《漂亮女上司》有感
    高质量c/c++编程(6)
    高质量c/c++编程(5)
  • 原文地址:https://www.cnblogs.com/tonix/p/4434832.html
Copyright © 2011-2022 走看看