• P2014 [CTSC1997]选课


    P2014 [CTSC1997]选课

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <set>
    #include <queue>
    #include <map>
    #include <sstream>
    #include <cstdio>
    #include <cstring>
    #include <numeric>
    #include <cmath>
    #include <iomanip>
    #include <deque>
    #include <bitset>
    #include <cassert>
    //#include <unordered_set>
    //#include <unordered_map>
    #define ll              long long
    #define pll             pair<ll, ll>
    #define pii             pair<int, int>
    #define rep(i,a,b)      for(int  i=a;i<=b;i++)
    #define dec(i,a,b)      for(int  i=a;i>=b;i--)
    #define forn(i, n)      for(int i = 0; i < int(n); i++)
    using namespace std;
    int dir[4][2] = { { 1,0 },{ 0,1 } ,{ 0,-1 },{ -1,0 } };
    const long long INF = 0x7f7f7f7f7f7f7f7f;
    const int inf = 0x3f3f3f3f;
    const double pi = acos(-1.0);
    const double eps = 1e-6;
    const ll mod = 1e9 + 7;
    
    template<typename T>void read(T & x) {
        T f = 1; x = 0; char s = getchar();
        while (s < '0' || s > '9') { if (s == '-')f = -1; s = getchar(); }
        while (s >= '0' && s <= '9') { x = x * 10 + s - '0'; s = getchar(); }
        x *= f;
    }
    
    template<typename T>void print(T x) {
        if (x < 0) putchar('-'), x = -x;
        if (x > 9) print(x / 10);
        putchar(x % 10 + '0');
    }
    
    /**********************************************************/
    const int N = 300 + 5;
    
    int n, m;
    int dp[N][N];
    vector<int> g[N];
    
    int dfs(int x)
    {
        int sz = 1;
        for (auto to : g[x])
        {
            int p = dfs(to);
            dec(i, min(m + 1, sz), 1)
            {
                for (int j = 1; j <= p && j + i <= m + 1; j++)
                {
                    dp[x][i + j] = max(dp[x][i + j], dp[x][i] + dp[to][j]);
                }
            }
            sz += p;
        }
        return sz;
    }
    
    int main()
    {
    #ifdef _DEBUG
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
        cin >> n >> m;
        rep(i, 1, n)
        {
            int u;
            cin >> u >> dp[i][1];
            g[u].push_back(i);
        }
        dfs(0);
        cout << dp[0][m + 1] << endl;
        return 0;
    }
  • 相关阅读:
    laravel读excel
    React 还是 Vue: 你应该选择哪一个Web前端框架?
    React16版本的新特性
    你真的了解React吗
    express操作数据库
    跨域的九种解决方式
    Koa基本使用
    luogu3806 【模板】点分治1
    luogu2634 聪聪可可
    poj1741 Tree
  • 原文地址:https://www.cnblogs.com/dealer/p/13718845.html
Copyright © 2020-2023  润新知