AcWing 324. 贿赂FIPA
大型补档计划
\(f[i][j]\) 表示第 \(i\) 个国家,获得 \(j\) 个国家支持,用的最少花费
\(f[i][0] = 0\)
\(f[i][sz[i]] = w[i]\)
对于每条边 \((u, v)\)
枚举 \(u\) 的第二维 \(j\),\(v\) 的第二维 \(k\) \((k <= j)\)
\(f[u][j] = min(f[u][j], f[v][k] + f[u][j - k])\)
#include <cstdio>
#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <sstream>
using namespace std;
const int N = 205;
int n, m;
int head[N], numE = 0, out[N], idx = 1;
map<string, int> st;
int sz[N], f[N][N], w[N];
struct E{
int next, v;
} e[N];
void add(int u, int v) {
e[++numE] = (E) { head[u], v };
head[u] = numE;
}
void dfs(int u) {
sz[u] = 1;
f[u][0] = 0;
for (int i = head[u]; i; i = e[i].next) {
int v = e[i].v;
dfs(v);
sz[u] += sz[v];
for (int j = m; j >= 1; j--)
for (int k = 1; k <= j; k++)
f[u][j] = min(f[u][j], f[u][j - k] + f[v][k]);
}
f[u][min(sz[u], m)] = min(f[u][min(sz[u], m)], w[u]);
for (int i = m - 1; i >= 1; i--) f[u][i] = min(f[u][i], f[u][i + 1]);
}
int main() {
ios::sync_with_stdio(false);
while (cin >> n >> m) {
numE = 0; idx = 1;
memset(head, 0, sizeof head);
memset(f, 0x3f, sizeof f);
memset(out, 0, sizeof out);
st.clear();
for (int i = 1; i <= n; i++) {
int val; string s, b, c;
cin >> c >> val;
if (!st[c]) st[c] = ++idx;
w[st[c]] = val;
int a = st[c];
getline(cin, s);
stringstream ss(s);
while (ss >> b) {
if (!st[b]) st[b] = ++idx;
add(a, st[b]); out[st[b]]++;
}
}
for (int i = 2; i <= idx; i++) if (!out[i]) add(1, i);
w[1] = 1e9; dfs(1);
cout << f[1][m] << endl;
}
}
AcWing 324. 贿赂FIPA的更多相关文章
- POJ 3345 Bribing FIPA 树形DP
题目链接: POJ 3345 Bribing FIPA 题意: 一个国家要参加一个国际组织, 需要n个国家投票, n个国家中有控制和被控制的关系, 形成了一颗树. 比如: 国家C被国家B控制, 国 ...
- 腾讯机试题 AcWing 603 打怪兽
题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...
- poj3345 Bribing FIPA【树形DP】【背包】
Bribing FIPA Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5910 Accepted: 1850 Desc ...
- Codeforces Round #324 (Div. 2)解题报告
---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...
- 百度定位一直出现4.9E -324的问题解决方法
问题:华为mate10一直在申请百度定位的时候出现此问题并且定位权限和定位服务都打开的情况也是返回这个参数 明显没有定位成功,其他手机暂时没有出现(只要打开定位权限就会立即定位成功) 解决:在定位之前 ...
- loadrunner场景报错:Error: CCI compilation error -/tmp/brr_5d65oV/netdir/E/\320\324/Action.c (318): undeclared identifier `LAST'解决思路
在windows下写的脚本编译通过 但是拿到linux agent场景执行中就会提示如下,同样的脚本在windows agent下没有任何问题 agent连的是linux负载机 通过脚本一行一行排查, ...
- leetcode 280.Wiggle Sort 、324. Wiggle Sort II
Wiggle Sort: 注意:解法一是每次i增加2,题目不是保证3个3个的情况,而是整个数组都要满足要求. 解法一错误版本: 如果nums的长度是4,这种情况下nums[i+1]会越界.但是如果你用 ...
- AcWing 143. 最大异或对
https://www.acwing.com/problem/content/145 #include <iostream> #include <algorithm> usin ...
- AcWing 153. 双栈排序
https://www.acwing.com/problem/content/155/ #include <cstring> #include <iostream> #incl ...
随机推荐
- Mysql分区、分表、分库
1.MySQL分区 一般情况下我们创建的表对应一组存储文件,使用MyISAM存储引擎时是一个.MYI和.MYD文件,使用Innodb存储引擎时是一个.ibd和.frm(表结构)文件. 当数据量较大时( ...
- peterson算法(软件互斥 转)
1. 背景 首先,看个例子,进程P1,P2共用一个变量COUNT,初始值为0 因为P1,P ...
- TextView之富文本
项目中使用富文本比较常见了,一行显示多种样式颜色的文本,使用 ClickableSpan 富文本实现在同一个 TextView 中的文本的颜色.大小.背景色等属性的多样化和个性化. 我们也可以使用Ht ...
- SpringBoot微服务框架
springboot 是什么? 配置如何编写 yaml 自动装配原理 集成Web开发 集成数据库Druid 分布式开发:Dubbo(RPC)+zookeeper swagger:接口文档 任务调度 S ...
- mysql mybatis Date java时间和写入数据库时间不符差一秒问题
1,java的数据库实体定义 private Timestamp createTime:2,非常重要!ddl语句建表字段的单位 datetime要手动设置保留3位毫秒数,不然就四舍五入了! ALTER ...
- 删除osd的正确方式
在ceph的集群当中关于节点的替换的问题,一直按照以前的方式进行的处理,处理的步骤如下: 停止osd进程 /etc/init.d/ceph stop osd.0 这一步是停止osd的进程,让其他的os ...
- du查看的目录大小与df查看的大小不同的时候用lsof查找
首先MAN一下两个命令,看一下解释的区别: du - estimate file space usage df - report file system disk space usage du估计文件 ...
- if __name__ == "__main__"的疑惑
Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...
- 转化dataframe中一组序列为时间序列的方法-to_datetime()的最新用法
一.to_datetime()的最新用法: hs300_hf['date'] = pd.to_datetime(hs300_hf['date']) hs300_hf.set_index('date', ...
- 精尽MyBatis源码分析 - SQL执行过程(四)之延迟加载
该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...