zoukankan      html  css  js  c++  java
  • Luogu_2015 二叉苹果树

    题目链接

    SB 裸题……就是想随便挂在这里……同样的题还有 Luogu_2014 选课

    Luogu_2015 二叉苹果树

     1 #include <queue>
     2 #include <cstdio>
     3 #include <cctype>
     4 #include <cstring>
     5 #include <iostream>
     6 #include <algorithm>
     7 using namespace std;
     8 
     9 const int maxn = 100 + 10;
    10 int n, m, head[maxn], size[maxn], val[maxn], dp[maxn][maxn],ans, edge_num;
    11 
    12 struct Edge { int v, w, nxt; } edge[maxn << 1];
    13 
    14 inline int read() {
    15   register char ch = 0; register int w = 0, x = 0;
    16   while( !isdigit(ch) ) w |= (ch == '-'), ch = getchar();
    17   while( isdigit(ch) ) x = (x * 10) + (ch ^ 48), ch = getchar();
    18   return w ? -x : x;
    19 }
    20 
    21 inline void Add_edge(int u, int v, int w) {
    22   edge[++edge_num].v = v, edge[edge_num].w = w;
    23   edge[edge_num].nxt = head[u], head[u] = edge_num;
    24 }
    25 
    26 inline int Set_value(int x, int p) {
    27   for(int i = head[x]; i; i = edge[i].nxt) {
    28     if( edge[i].v == p ) continue;
    29     size[x] = size[x] + Set_value(edge[i].v, x), val[edge[i].v] = edge[i].w;
    30   }
    31   return ++size[x];
    32 }
    33 
    34 inline void Deep_fs(int x, int p) {
    35   vector<pair<int, int> > v;
    36   for(int i = head[x]; i; i = edge[i].nxt) {
    37     if( edge[i].v == p ) continue;
    38     v.clear(), Deep_fs(edge[i].v, x);
    39     for(int j = 0; j <= min(size[edge[i].v], m); ++j)
    40       v.push_back(make_pair(j + 1, dp[edge[i].v][j] + val[edge[i].v]));
    41     for(int j = m; j > 0; --j)
    42       for(int k = 0; k < v.size(); ++k)
    43         if( j >= v[k].first ) dp[x][j] = max(dp[x][j], dp[x][j - v[k].first] + v[k].second);
    44   }
    45 }
    46 
    47 int main(int argc, const char *argv[])
    48 {
    49   freopen("..\nanjolno.in", "r", stdin);
    50   freopen("..\nanjolno.out", "w", stdout);
    51 
    52   scanf("%d%d", &n, &m);
    53   for(int u, v, w, i = 1; i < n; ++i)
    54     u = read(), v = read(), w = read(), Add_edge(u, v, w), Add_edge(v, u, w);
    55   Set_value(1, 0), Deep_fs(1, 0), printf("%d
    ", dp[1][m]);
    56 
    57   fclose(stdin), fclose(stdout);
    58   return 0;
    59 }

    Luogu_2014 选课

     1 #include <queue>
     2 #include <cstdio>
     3 #include <cctype>
     4 #include <cstring>
     5 #include <iostream>
     6 #include <algorithm>
     7 using namespace std;
     8 
     9 const int maxn = 300 + 10;
    10 int n, m, head[maxn], val[maxn], siz[maxn], dp[maxn][maxn], edge_num;
    11 
    12 struct Edge { int v, nxt; } edge[maxn];
    13 
    14 inline int read() {
    15   register char ch = 0; register int w = 0, x = 0;
    16   while( !isdigit(ch) ) w |= (ch == '-'), ch = getchar();
    17   while( isdigit(ch) ) x = (x * 10) + (ch ^ 48), ch = getchar();
    18   return w ? -x : x;
    19 }
    20 
    21 inline void Add_edge(int u, int v) {
    22   edge[++edge_num].v = v;
    23   edge[edge_num].nxt = head[u], head[u] = edge_num;
    24 }
    25 
    26 inline int Deep_fs(int x, int p) {
    27   for(int i = head[x]; i; i = edge[i].nxt) {
    28     if( edge[i].v == p ) continue;
    29     siz[x] = siz[x] + Deep_fs(edge[i].v, x);
    30     for(int j = m; j >= 0; --j)
    31       for(int k = 0; k <= min(m, siz[edge[i].v]); ++k)
    32         if( j >= k + 1 ) dp[x][j] = max(dp[x][j], dp[x][j - k - 1] + dp[edge[i].v][k] + val[edge[i].v]);
    33   }
    34   return ++siz[x];
    35 }
    36 
    37 int main(int argc, const char *argv[])
    38 {
    39   freopen("..\nanjolno.in", "r", stdin);
    40   freopen("..\nanjolno.out", "w", stdout);
    41 
    42   scanf("%d%d", &n, &m);
    43   for(int v, i = 1; i <= n; ++i) v = read(), val[i] = read(), Add_edge(v, i);
    44   Deep_fs(0, -1), printf("%d
    ", dp[0][m]);
    45 
    46   fclose(stdin), fclose(stdout);
    47   return 0;
    48 }

     —— 假如我今生无份遇到你,就让我永远感到恨不相逢 —— 让我念念不忘,让我在醒时梦中都怀带着这悲哀的苦痛。

  • 相关阅读:
    从csdn转移到博客园的一篇测试文章
    接口与抽象类的区别
    python网络爬虫进阶之HTTP原理,爬虫的基本原理,Cookies和代理介绍
    python验证码识别(2)极验滑动验证码识别
    VMWare虚拟机应用介绍
    Rpg maker mv角色扮演游戏制作大师简介
    python数据挖掘之数据探索第一篇
    python数据分析&挖掘,机器学习环境配置
    python爬取豆瓣视频信息代码
    python验证码处理(1)
  • 原文地址:https://www.cnblogs.com/nanjoqin/p/10081780.html
Copyright © 2011-2022 走看看