这题就是复习下网络流。

 #include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i <= b; i++)
#define drep(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, a, b) for (int i = a; i < b; i++)
#define mp make_pair
#define pb push_back
#define clr(x) memset(x, 0, sizeof(x))
#define xx first
#define yy second
using namespace std;
typedef long long i64;
typedef pair<int, int> pii;
const int inf = ~0U >> ;
const i64 INF = ~0ULL >> ;
//******************************** const int maxn = , maxm = ; struct Ed {
int u, v, nx, c, w; Ed() {}
Ed(int _u, int _v, int _nx, int _c, int _w) :
u(_u), v(_v), nx(_nx), c(_c), w(_w) {}
} E[maxm << ];
int G[maxn], edtot, cur[maxn];
void addedge(int u, int v, int c, int w) {
E[edtot] = Ed(u, v, G[u], c, w);
G[u] = edtot++;
E[edtot] = Ed(v, u, G[v], , -w);
G[v] = edtot++;
} int level[maxn], s , t;
bool bfs() {
static int que[maxn]; int qh(), qt();
clr(level);
level[que[++qt] = s] = ;
while (qh != qt) {
int x = que[++qh];
for (int i = G[x]; i != -; i = E[i].nx) if (!level[E[i].v] && E[i].c) {
level[que[++qt] = E[i].v] = level[x] + ;
}
}
return !!level[t];
}
int dfs(int u, int rm) {
if (u == t) return rm;
int rm1 = rm;
for (int &i = cur[u]; i != -; i = E[i].nx) {
if (level[E[i].v] == level[u] + && E[i].c) {
int flow = dfs(E[i].v, min(rm, E[i].c));
E[i].c -= flow, E[i ^ ].c += flow;
if ((rm -= flow) == ) break;
}
}
if (rm1 == rm) level[u] = ;
return rm1 - rm;
} int dis[maxn], vis[maxn];
bool spfa() {
static int que[maxn]; int qh(), qt();
memset(dis, 0x3f, sizeof(dis));
clr(vis);
dis[que[++qt] = s] = , vis[s] = ;
while (qh != qt) {
int x = que[++qh]; vis[x] = ;
for (int i = G[x]; i != -; i = E[i].nx) {
if (E[i].c && dis[E[i].v] > dis[x] + E[i].w) {
dis[E[i].v] = dis[x] + E[i].w;
if (!vis[E[i].v]) que[++qt] = E[i].v, vis[E[i].v] = ;
}
}
}
return dis[t] != 0x3f3f3f3f;
}
int ret;
int dinic(int u, int rm) {
vis[u] = ;
if (u == t) return rm;
int rm1 = rm;
for (int i = G[u]; i != -; i = E[i].nx) {
if (dis[E[i].v] == dis[u] + E[i].w && E[i].c && !vis[E[i].v]) {
int flow = dinic(E[i].v, min(rm , E[i].c));
E[i].c -= flow, E[i ^ ].c += flow;
ret += flow * E[i].w;
if ((rm -= flow) == ) break;
}
}
if (rm1 == rm) dis[u] = ;
return rm1 - rm;
} int main() {
int n, m, K;
scanf("%d%d%d", &n, &m, &K);
memset(G, -, sizeof(G));
rep(i, , m) {
int x, y, c, w;
scanf("%d%d%d%d", &x, &y, &c, &w);
addedge(x, y, c, w);
addedge(x, y, c, );
}
s = , t = n + ; addedge(s, , 0x3f3f3f3f, ), addedge(n, t, 0x3f3f3f3f, );
int ans();
while (bfs()) memcpy(cur, G, sizeof(G)), ans += dfs(s, 0x3f3f3f3f);
printf("%d ", ans >> );
for (int i = ; i <= edtot; i += ) {
if (E[i].w == ) E[i].c += E[i ^ ].c, E[i ^ ].c = ;
else E[i].c = 0x3f3f3f3f, E[i ^ ].c = ;
if (E[i].u == s) E[i].c = (ans >> ) + K;
}
while (spfa()) clr(vis), dinic(s, 0x3f3f3f3f);
printf("%d\n", ret);
}

bzoj-1834 network 网络扩容 【网络流】的更多相关文章

  1. 【BZOJ】【1834】【ZJOI2010】Network 网络扩容

    网络流/费用流 这题……我一开始sb了. 第一问简单的最大流…… 第二问是要建费用流的图的……但是是在第一问的最大流跑完以后的残量网络上建,而不是重建…… 我们令残量网络上原有的弧的费用全部为0(因为 ...

  2. BZOJ 1834: [ZJOI2010]network 网络扩容(最大流+最小费用最大流)

    第一问直接跑最大流.然后将所有边再加一次,费用为扩容费用,容量为k,再从一个超级源点连一条容量为k,费用为0的边到原源点,从原汇点连一条同样的边到超级汇点,然  后跑最小费用最大流就OK了. ---- ...

  3. bzoj 1834: [ZJOI2010]network 网络扩容 -- 最大流+费用流

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一 ...

  4. 【bzoj1834】[ZJOI2010]network 网络扩容

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2701  Solved: 1368[Submit ...

  5. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3330  Solved: 1739 [Subm ...

  6. bzoj1834: [ZJOI2010]network 网络扩容

    努力看了很久样例一直过不了...然后各种输出中间过程啊巴拉巴拉弄了1h,没办法了...然后突然想到啊原来的边可以用啊为什么不用...于是A了...感人肺腑 #include<cstdio> ...

  7. BZOJ1834 [ZJOI2010]network 网络扩容 【最大流,费用流】

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3394  Solved: 1774 [Subm ...

  8. BZOJ_1834_[ZJOI2010]network 网络扩容_费用流

    BZOJ_1834_[ZJOI2010]network 网络扩容_费用流 题意: 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求:  1.在不扩容的 ...

  9. 【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流

    [BZOJ1834][ZJOI2010]network 网络扩容 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不 ...

  10. BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)

    一看就知道是模板题= = ,不说什么了= = PS:回去搞期末了,暑假再来刷题了 CODE: #include<cstdio> #include<iostream> #incl ...

随机推荐

  1. 学习笔记——建造者模式Builder

    构造者模式.外部场景如果需要一个汽车类,它不需要关心如何构造,它只需要告诉Director需要什么,就可以从Director获得. 如:CDirector(IBuilder* aBuilder); 场 ...

  2. startActivityForResult相关的

    在Fragment里调用startActivityForResult,界面回来后,会先走其宿主Activity的onActivityResult方法,再走Fragment的. 在Fragment里面嵌 ...

  3. hibernate事务并发问题(脏读,不可重复读,幻读)

    脏读  dirty read:  读了别的事务没有提交的事务, 可能回滚, 数据可能不对. 不可重复读 non repeatable read: 同一个事务里前后读出来的数据不一样, 被另一个事务影响 ...

  4. css text-indent:999em

    em是个单位,是字符宽度text-indent:999em首行缩进999个字符 大约多长?大约相当于多少PX?能不能用PX来表示这个缩进? 等于当前的字体大小.当font-size:12px; 1em ...

  5. iptables配置vsftp访问

    一.FTP服务简介    FTP服务器有两种工作模式:主动模式和被动模式.这两种方式的特点如下:  (1)主动模式下:  tcp, 20(20号端口用于数据传输),21(21号端口用于控制连接) (2 ...

  6. dpkg -P xx

    dpkg -l | grep ^rc | cut -d' ' -f3|xargs dpkg -P http://www.linuxquestions.org/questions/debian-26/h ...

  7. The Wall (medium)

    The Wall (medium) Heidi the Cow is aghast: cracks in the northern Wall? Zombies gathering outside, f ...

  8. PAT (Advanced Level) 1058. A+B in Hogwarts (20)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  9. 对Java配置文件Properties的读取、写入与更新操作

    http://breezylee.iteye.com/blog/1340868 对Java配置文件Properties的读取.写入与更新操作 博客分类: javase properties  对Jav ...

  10. C#调用SCL2008 动态库SCL_API_cdecl.dll or SCL_API_Stdcall.dll,提示找不到指定模块

    在公司用的联想 ThinkPad T430i,原装配置及系统,开机巨慢.按下开机键到登陆界面超过1分钟,再到桌面这个时间就难说了,多时有超过3分钟,进入桌面还要等待几分钟才能正常操作.新年过来向公司领 ...