hdu4966 GGS-DDU

news/2025/3/31 23:42:42/

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

文章来源:https://blog.csdn.net/weixin_30633405/article/details/96793737
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/928255.html

相关文章

GGS-NNs + babi任务

数据符号 graph G ( V , E ) G (V, E) G(V,E)node v v vedge e ( v , v ′ ) , ( v , v ′ ) 表 示 由 v 到 v ′ 的 边 e(v,v),(v,v)表示由v到v的边 e(v,v′),(v,v′)表示由v到v′的边node representation h v ∈ R D h_v\in R^D hv​∈RDnode label l v l_v lv​顶点集合…

GGS校园超市购物系统

Java新人一个&#xff0c;基于程序基本概念、流程控制和数组制作了一个简陋的超市购物系统&#xff0c;还望各位大佬指点指点不足之处 完整代码在最后 一&#xff1a;数组的运用 1&#xff1a;创建数组分配空间并赋值 //声明数组类型并分配空间//str、price用来存储商品名称…

vue 实现一键复制功能(复制图片和文字)

前言 一键复制这个功能也是经常使用到的&#xff0c;实现起来并没有那么复杂&#xff0c;原生就可以实现。 原理就是找到这个Dom元素把这个元素里面的文字和图片直接复制下来。 细节复制方法的时候可能会出现斜杆&#xff08;不是不生效不用管&#xff09;&#xff0c;图片大…

AR气象博物馆模拟体验提升青少年认知

国际气象节主要目的是唤起人们对气象工作的重视和热爱。近年来&#xff0c;极端天气频发&#xff0c;人们需要提高警惕&#xff0c;AR气象远程普利用ar技术特有的沉浸式的体感互动&#xff0c;通过模拟演练提升体验者的安全防范意识和求生技巧。 系统结合VR虚拟现实、AR增强现实…

红米Note 3获取root权限的教程

红米Note 3通过什么方式拥有了Root权限&#xff1f;做开发的人知道&#xff0c;android机器有Root权限&#xff0c;如果手机拥有了root相关权限&#xff0c;可以实现更多的功能&#xff0c;举个栗子做开发的人单位的营销部门的同事&#xff0c;使用某些营销软件都需要在Root权限…

红米手机Pro获得ROOT权限的步骤

红米手机Pro有啥好方法拥有了root超级权限&#xff1f;大伙都了解&#xff0c;安卓系统有root超级权限&#xff0c;如果手机拥有了root相关权限&#xff0c;可以实现更强大的功能&#xff0c;举例子&#xff0c;大伙企业的营销部门&#xff0c;使用大多数营销应用都需要在root超…

红米手机开发版怎么样获取ROOT权限

红米手机有么好方法获得Root权限&#xff1f;我们都清楚&#xff0c;Android系统有Root权限&#xff0c;如果手机获得root相关权限&#xff0c;能够实现更完美的功能&#xff0c;比如我们企业的营销部门同事&#xff0c;使用较多营销软件都需要在Root权限下执行&#xff0c;如果…

红米手机5获取Root超级权限的步骤

红米手机5能如何获得root超级权限&#xff1f;各位知道&#xff0c;Android系统有root超级权限&#xff0c;如果手机获得root相关权限&#xff0c;就能够实现更强大的功能&#xff0c;打比方各位企业的营销部门&#xff0c;使用较多营销软件都需要在root超级权限下执行&#xf…