hdu4966 GGS-DDU

有 \(n\) 个课程,每种课程有 \(a_i\) 级,一开始你每种课程都为 \(0\) 级,有 \(m\) 个升级方案:\((x,\ l1,\ y,\ l2,\ c)\) ,若你课程 \(x\) 已达到 \(l1\) 级,那么你可以花费 \(c\) 的价格,使得课程 \(y\) 达到 \(l2\) 级。求最小花费使得所有课程满级。

\(n\leq50,\ m\leq2\times10^3,\ a_i\leq500\)

最小树形图


将每个课程拆为 \(a_i\) 个点,分别表示此课程等级为 \(0\cdots a_i\) 。建一个虚拟根节点,连向所有等级为 \(0\) 的节点,边权为 \(0\) 。升级方案可以连边课程 \(x\) 的 \(l1\cdots a_x\) 到课程 \(y\) 的 \(l2\) ,边权为 \(c\) ,再从所有等级为 \(k\) 的节点向等级为 \(k-1\) 的节点连边,权值为 \(0\) ,接着跑最小树形图就吼辣

时间复杂度 \(O(m\sum a_i)\)

代码

#include <bits/stdc++.h>
using namespace std;const int maxn = 2.5e4 + 10, maxm = 1e6 + 10;
int n, m, k, a[60], mp[60][510], val[maxn], vis[maxn], pre[maxn], tid[maxn];
struct edges {int u, v, w;edges(int x = 0, int y = 0, int z = 0) : u(x), v(y), w(z) {}
} e[maxm];int edmonds() {int ans = 0;while (1) {memset(vis, 0, sizeof vis);memset(tid, 0, sizeof tid);memset(val, 0x3f, sizeof val);for (int i = 1; i <= m; i++) {int u = e[i].u, v = e[i].v;if (u != v && e[i].w < val[v]) {val[v] = e[i].w, pre[v] = u;}}for (int i = 1; i < n; i++) {if (val[i] > 1e9) return -1;}int tot = 0;for (int i = 1; i < n; i++) {int u = i;ans += val[i];while (u < n && !tid[u] && vis[u] != i) {vis[u] = i, u = pre[u];}if (u < n && !tid[u]) {tid[u] = ++tot;for (int v = pre[u]; u != v; v = pre[v]) {tid[v] = tot;}}}if (!tot) break;for (int i = 1; i <= n; i++) {if (!tid[i]) tid[i] = ++tot;}for (int i = 1; i <= m; i++) {int u = e[i].u, v = e[i].v;e[i].u = tid[u], e[i].v = tid[v];if (u != v) e[i].w -= val[v];}n = tot;}return ans;
}void solve() {m = 0;for (int i = 1; i <= n; i++) {scanf("%d", a + i);mp[i][0] = mp[i - 1][a[i - 1]] + 1;for (int j = 1; j <= a[i]; j++) {mp[i][j] = mp[i][j - 1] + 1;e[++m] = edges(mp[i][j], mp[i][j - 1], 0);}}for (int i = 1; i <= k; i++) {int p1, p2, l1, l2, w;scanf("%d %d %d %d %d", &p1, &l1, &p2, &l2, &w);for (int j = l1; j <= a[p1]; j++) {e[++m] = edges(mp[p1][j], mp[p2][l2], w);}}for (int i = 1; i <= n; i++) {e[++m] = edges(mp[n][a[n]] + 1, mp[i][0], 0);}n = mp[n][a[n]] + 1;printf("%d\n", edmonds());
}int main() {while (scanf("%d %d", &n, &k) == 2 && n && k) {solve();}return 0;
}

转载于:https://www.cnblogs.com/Juanzhang/p/10389038.html

hdu4966 GGS-DDU相关推荐

  1. DDP、DDU、DAP的区别你都知道吗?

    DDP和DDU这两种贸易术语在货物的进出口中也经常会被使用到,而很多出口商对这些贸易术语的了解并不深,因此在货物的出口过程中经常会遇到一些不必要的麻烦,那么,究竟什么是DDP和DDU,这两种贸易术语究 ...

  2. hdu4966 最小树形图+虚根

    /* 辛辛苦苦调试半天, 过了样例,竟然没有ac!! 网上对比了ac代码,感觉添加一个虚根就能ac 但是想不明白为什么 */ /* 第二天想了下,知道了为什么wa:因为从等级0连到其他课程等级i的不止 ...

  3. GGS ERROR 160 Bad column index

    最近由于一个数据库正在升级"改造",部分表结构做了一些调整,以致GoldenGate进程出现了ABENDED状态,下面分享一个因GoldenGate源端表结构发生变化后,引起Gol ...

  4. GGS WARNING 218 Aborted grouped transaction on

    描述: 通过linux系统复制表emp1到windows系统,发生如下错误:  GGS WARNING     218  Aborted grouped transaction on   解决办法 1 ...

  5. CC2640R2F BLE5.0 蓝牙协议栈GAP GATT 服务(GGS)

    GAP GATT 服务(GGS) 在前面GATT服务和简介中说过,GGS服务包含设备和访问信息,例如设备名称,Appearance,外围首选连接参数.GGS的目的是在设备发现和连接启动过程中进行辅助. ...

  6. 【时序分割】【未完成】Greedy Gaussian Segmentation of Multivariate Time Series(贪心高斯时序分割---GGS)

    文章题目:Greedy Gaussian Segmentation of Multivariate Time Series(2018年4月) 作者:David Hallac: Peter Nystru ...

  7. 写了两个月的黑白棋对战程序,发现早就有了GGS,互联网上的游戏。

    1.什么是ODK?     ODK的全称是Othello Development Kit,这是一套用来开发能够连接至GGS(the Generic Game Server )的黑白棋的开发包.GGS是 ...

  8. hdu4966 最小树形图(最少辅导花费)

    题意:       以一些科目,和辅导班,每个科目最终要求修到某个等级,可以花一定的钱在辅导班把某一科目修到某一等级,进入辅导班的时候会有一个限制,那就是达到他给出的科目和等级限制,比如a b c d ...

  9. 最小树形图-hdu4966

    https://vjudge.net/contest/311526#problem/G 大意:给定n(50)门属性,每门属性有a[i](500)个级别,同时有M(2000)门课程,参加j号课程需要c属 ...

  10. hdu-4966 GGS-DDU 最小树形图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4966 题意: 给你n门课的最高等级及m条升级方法,开始时你每门课的等级都在等级0,升级方法的5个参数代 ...

最新文章

  1. binlog流程 mysql_小米 MySQL 数据实时同步到大数据数仓的架构与实践
  2. 离散数学中的联结符号
  3. java反射设置access_Java反射之java.lang.reflect.Field
  4. leetcode--116. 填充每个节点的下一个右侧节点指针
  5. 部分网卡安装esxi6.7报错“Shutting down firmware services…解决方法
  6. linux ln链接命令
  7. 2019JAVA中ajax不高亮_2019-01-18 ajax请求时,token死活放不大header中
  8. CAN FD的波特率到底能跑多快?
  9. python安装apk到手机_python自动安装apk文件
  10. React React组件之间的通信方式
  11. 解题:NOI 2010 航空管制
  12. xamp安装及环境配置教程
  13. mdf数据库文件打开
  14. 无光驱安装原版 windows server2008,win7 的方法,64位的
  15. 孙鑫VC++学习笔记(转载至程序员之家--虎非龙)[11--15]
  16. Android 点击图片全屏
  17. 【GDOI2019Day1模拟2019.4.28】爱乐之城
  18. 快速了解使用ncurses(按键的快速响应)
  19. 刷题打卡一刷完成 总结
  20. 软件测试职业规划(转)

热门文章

  1. twitter关注排行榜
  2. Epicor流水编号规则功能
  3. 04 爬取周杰伦首页歌单
  4. 连接公司办公 快速连接公司协同办公的20款必备软件
  5. 5G钢铁渐入佳境:中国电信推动从“1”迈向“N”
  6. 千千静听皮肤急速合成器
  7. 用阿里网盘有一段时间了,说说总体感受吧
  8. Lookup Transformation
  9. 邮件安全防护之反垃圾邮件开源软件ASSP
  10. 语音特征提取(语谱图Spectrogram,Fbank, MFCC, 及其delta-一阶差分)——python代码