ZrOJ #878. 小K与赞助 (网络流)
傻逼最大费用流:
.
两棵树分别流,最后汇合。
CODE
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int MAXP = 1510;
const int MAXN = 505;
const int MAXM = 5005;
const int INF = 0x3f3f3f3f;
int n, a[MAXN], rt[2], q[2], fa[2][MAXN], lim[2][MAXN];
vector<int>G[2][MAXN];
int S, T, ans;
void dfs(int o, int u) {
int siz = G[o][u].size(), v;
for(int i = 0; i < siz; ++i)
if((v=G[o][u][i]) != fa[o][u]) {
fa[o][v] = u;
dfs(o, v);
}
}
int info[MAXP], fir[MAXP], to[MAXM], nxt[MAXM], c[MAXM], w[MAXM], cnt=1;
inline void link(int u, int v, int cc, int ww) {
to[++cnt] = v, nxt[cnt] = fir[u], fir[u] = cnt; c[cnt] = cc, w[cnt] = ww;
to[++cnt] = u, nxt[cnt] = fir[v], fir[v] = cnt; c[cnt] = 0, w[cnt] = -ww;
}
int dis[MAXP];
bool inq[MAXP];
inline bool spfa() {
static queue<int> q;
memset(dis, -1, sizeof dis);
dis[S] = 0; q.push(S);
while(!q.empty()) {
int u = q.front(); q.pop(); inq[u] = 0;
for(int i = fir[u], v; i; i = nxt[i])
if(c[i] && dis[v=to[i]] < dis[u] + w[i]) {
dis[v] = dis[u] + w[i];
if(!inq[v]) inq[v] = 1, q.push(v);
}
}
return ~dis[T];
}
bool vis[MAXP];
int Aug(int u, int Max) {
if(u == T) { ans += Max * dis[T]; return Max; }
vis[u] = 1;
int delta, flow = 0;
for(int &i = info[u], v; i; i = nxt[i])
if(c[i] && dis[v=to[i]] == dis[u] + w[i] && !vis[v] && (delta=Aug(v, min(Max-flow, c[i])))) {
flow += delta, c[i] -= delta, c[i^1] += delta;
if(flow == Max) break;
}
vis[u] = 0; return flow;
}
inline void Max_Cost_flow() {
while(spfa())
memcpy(info, fir, sizeof fir), Aug(S, INF);
}
int main () {
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for(int o = 0; o < 2; ++o) {
scanf("%d", &rt[o]);
for(int i = 1, x, y; i < n; ++i)
scanf("%d%d", &x, &y), G[o][x].pb(y), G[o][y].pb(x);
dfs(o, rt[o]);
}
memset(lim, 0x3f, sizeof lim);
for(int o = 0; o < 2; ++o) {
scanf("%d", &q[o]);
for(int i = 1, x, y; i <= q[o]; ++i)
scanf("%d%d", &x, &y), lim[o][x] = y;
}
S = 0, T = 3*n + 1;
for(int i = 1; i <= n; ++i) {
link(fa[0][i], i, lim[0][i], 0);
link(fa[1][i]?n+fa[1][i]:0, n+i, lim[1][i], 0);
link(i, 2*n+i, 1, 0);
link(n+i, 2*n+i, 1, 0);
link(2*n+i, T, 1, a[i]);
}
Max_Cost_flow();
printf("%d\n", ans);
}
ZrOJ #878. 小K与赞助 (网络流)的更多相关文章
- 【BZOJ】3436: 小K的农场
3436: 小K的农场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 938 Solved: 417[Submit][Status][Discuss ...
- BZOJ3436 小K的农场
Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个 ...
- 洛谷P1993 小 K 的农场
题目描述 小 K 在 Minecraft 里面建立很多很多的农场,总共 n 个,以至于他自己都忘记了每个 农场中种植作物的具体数量了,他只记得一些含糊的信息(共 m 个),以下列三种形式描 述: 农场 ...
- 2014.7.7 模拟赛【小K的农场】
3.小K的农场(farm.pas/cpp/c) [题目描述] 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三 ...
- 小K的H5之旅-HTML的基本结构与基本标签
一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源码的工具. 二.HTML文档的结构 HTML文档主要包括三大部分:文档声明部分.<head>头部部 ...
- [51nod1457]小K vs. 竹子
小K的花园种着n颗竹子(竹子是一种茎部中空并且长得又高又快的热带植物).此时,花园中第i颗竹子的高度是hi米,并且在每天结束的时候它生长ai米. 实际上,小K十分讨厌这些竹子.他曾经试图去砍光它们,但 ...
- 【BZOJ3436】小K的农场(差分约束)
[BZOJ3436]小K的农场(差分约束) 题面 由于BZOJ巨慢无比,使用洛谷美滋滋 题解 傻逼差分约束题, 您要是不知道什么是差分约束 您就可以按下\(Ctrl+W\)了 #include< ...
- 51 nod 1456 小K的技术(强连通 + 并查集)
1456 小K的技术 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 苏塞克王国是世界上创新技术的领先国家,在王国中有n个城市 ...
- BZOJ_3436_小K的农场_差分约束
BZOJ_3436_小K的农场_差分约束 题意: 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个),以下列三种形式描述 ...
随机推荐
- 平衡树B树B+树红黑树
二叉树与二叉查找树的操作是必须要熟练掌握的,接下来说的这些树实现起来很困难,所以我们重点去了解他们的特点. 一.平衡二叉查找树与红黑树 平衡树AVL:追求绝对的高度平衡,它具有稳定的logn的高度,因 ...
- PCA降维笔记
PCA降维笔记 一个非监督的机器学习算法 主要用于数据的降维 通过降维, 可以发现更便 于人类理解的特征 其他应用:可视化:去噪 PCA(Principal Component Analysis)是一 ...
- STM32与ARM代码执行过程
内存分配 1.ARM(JZ2440) 启动方式: 1)nor启动 注:1.bootloader烧在norflash的0地址 2.将bootloader从norflash中复制到SDRAM中的链接地址( ...
- PHP的 parse_ini_file 解析配置文件
解析配置文件: parse_ini_file 类似解析php.ini文件样 配置文件内容如下: Example #1 sample.ini 的内容 ; This is a sample configu ...
- k8s-gitlab搭建
Gitlab官方提供了 Helm 的方式在 Kubernetes 集群中来快速安装,但是在使用的过程中发现 Helm 提供的 Chart 包中有很多其他额外的配置,所以我们这里使用自定义的方式来安装, ...
- tomcat端口号被占用问题
1 netstat -ano| findstr 8761 2 taskkill /f/t/im 5156
- Kafka 消息中间件
kafka简介与应用场景 Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发,Link ...
- 音视频入门-02-RGB拼图
* 音视频入门文章目录 * 图片 & 像素点 & RGB 平时浏览的图片看不出像素点: 图片放大时,可以看出图片是一个个像素点组成的: 每个像素点的颜色可以用 RGB 表示: RGB ...
- c# 实体类转XML
/// <summary> /// 将实体类转换成XML /// </summary> /// <typeparam name="T">< ...
- XML和JSON序列化以及反序列化
1.将文件保存序列化至文档中,然后再读取: //首先创建可序列化的实体类 [Serializable] public class Message { public string Name { get; ...