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个),以下列三种形式描述 ...
随机推荐
- Linux "yin"才们的奇"yin"小技巧 --请用东北发音夸他们
1. include/linux/bits.h GENMASK(h, l) /* * Create a contiguous bitmask starting at bit position @l a ...
- java类的访问修饰符
1.java中外部类的访问修饰符有如下四种: public,默认,abstract,final // public,默认,abstract,final. public class Test1 {} c ...
- 怎样理解window.name
window.name表示当前窗口的名字, 而非网页的名字, 网页的名字需要使用: document.title; window.name一般是空的字符串, 他的作用其实是配合配合超链接和表单的tar ...
- (错误) Eclipse使用Maven创建Web时错误
转自:http://blog.csdn.net/afgasdg/article/details/12757433 问题描述: 使用Eclipse自带的Maven插件创建Web项目时报错: Could ...
- 在论坛中出现的比较难的sql问题:9(触发器专题 插入数据自动更新表数据)
原文:在论坛中出现的比较难的sql问题:9(触发器专题 插入数据自动更新表数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所 ...
- secureCRT 在本地和远程传输文件方式
securecrt 按下ALT+P就开启新的会话 进行ftp操作.输入:help命令,显示该FTP提供所有的命令 pwd: 查询linux主机所在目录(也就是远程主机目录) ...
- Flutter自定义绘制(1)- 绘制基础
CustomPainter Flutter 中实现绘制的主要是CustomPainter类. 我们一般继承这个类,来使用它: class MyPainter extends CustomPainter ...
- stm32 红外
相关文章:http://blog.csdn.net/zhangxuechao_/article/details/75039906 举例 u8 ir_tick() //记录高电平时间 { u8 i = ...
- XML文件解析之DOM解析
XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解 ...
- EF数据Linq方式查询
using (var ctx = new NorthwindEntities()) { //单表查询SQL查询方式 //SELECT * FROM Customers AS c WHERE c.Cit ...