Prelude

传送到Codeforces:0.0


Solution

板子题,在这里贴个板子。

这题面是smg?题面中有说每个点只能经过一次吗?是我瞎了吗?

因为这WA on test 27一个小时,烦死了,浪费时间。


Code

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <cassert> using namespace std;
const int MAXN = 1000;
const int MAXM = 100000;
const int INF = 0x3f3f3f3f;
int _w; int read() {
int x;
_w = scanf( "%d", &x );
return x;
} namespace MCMF {
struct Edge {
int u, v, c, f, w;
Edge() {}
Edge( int u, int v, int c, int f, int w ):
u(u), v(v), c(c), f(f), w(w) {}
}; int n, m, s, t;
int head[MAXN], nxt[MAXM];
Edge edge[MAXM]; void init( int _n ) {
n = _n, m = 0;
for( int i = 0; i < n; ++i )
head[i] = -1;
}
void adde( int u, int v, int c, int w ) {
edge[m] = Edge(u, v, c, 0, w);
nxt[m] = head[u], head[u] = m++;
edge[m] = Edge(v, u, 0, 0, -w);
nxt[m] = head[v], head[v] = m++;
} queue<int> q;
int dis[MAXN], inq[MAXN], res[MAXN], from[MAXN]; bool spfa() {
for( int i = 0; i < n; ++i )
dis[i] = INF, inq[i] = 0;
dis[s] = 0, inq[s] = 1, q.push(s), res[s] = INF;
while( !q.empty() ) {
int u = q.front(); q.pop();
inq[u] = 0;
for( int i = head[u]; ~i; i = nxt[i] ) {
const Edge &e = edge[i];
if( e.c > e.f && dis[u] + e.w < dis[e.v] ) {
dis[e.v] = dis[u] + e.w;
from[e.v] = i;
res[e.v] = min( res[u], e.c-e.f );
if( !inq[e.v] )
inq[e.v] = 1, q.push(e.v);
}
}
}
return dis[t] != INF;
}
void augment() {
int f = res[t], u = t;
while( u != s ) {
int i = from[u];
edge[i].f += f;
edge[i^1].f -= f;
u = edge[i].u;
}
}
int solve( int _s, int _t ) {
s = _s, t = _t;
int cost = 0;
while( spfa() ) {
cost += res[t] * dis[t];
augment();
}
return cost;
}
} int n, k, g[MAXN][MAXN];
int s, t, ss, tt, nid;
int in[MAXN], out[MAXN]; void adde( int u, int v, int l, int r, int w ) {
MCMF::adde(ss, v, l, 0);
MCMF::adde(u, tt, l, 0);
MCMF::adde(u, v, r-l, w);
} void solve() {
s = nid++, t = nid++, ss = nid++, tt = nid++;
for( int i = 1; i <= n; ++i )
in[i] = nid++, out[i] = nid++;
MCMF::init(nid);
adde(t, s, 0, INF, 0);
adde(s, out[1], 0, k, 0);
for( int i = 2; i <= n; ++i ) {
adde(out[i], t, 0, INF, 0);
adde(in[i], out[i], 1, 1, 0); // 每个点只能经过一次
}
for( int i = 1; i <= n; ++i )
for( int j = i+1; j <= n; ++j )
adde(out[i], in[j], 0, INF, g[i][j]);
printf( "%d\n", MCMF::solve(ss, tt) );
} int main() {
n = read()+1, k = read();
for( int i = 1; i <= n; ++i )
for( int j = i+1; j <= n; ++j )
g[i][j] = read();
solve();
return 0;
}

【题解】Catering World Finals 2015 上下界费用流的更多相关文章

  1. 【BZOJ3876】[Ahoi2014]支线剧情 有上下界费用流

    [BZOJ3876][Ahoi2014]支线剧情 Description [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩 ...

  2. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...

  3. 【BZOJ2055】80人环游世界 有上下界费用流

    [BZOJ2055]80人环游世界 Description     想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么     一个 ...

  4. 【bzoj1927】[Sdoi2010]星际竞速 有上下界费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832464.html 题目描述 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军 ...

  5. 【有源汇上下界费用流】BZOJ 3876 [Ahoi2014]支线剧情

    题目链接: http://www.lydsy.com:808/JudgeOnline/problem.php?id=3876 题目大意: 给定一张拓扑图(有向无环图),每条边有边权,每次只能从第一个点 ...

  6. BZOJ 3876: [Ahoi2014]支线剧情 [上下界费用流]

    3876: [Ahoi2014]支线剧情 题意:每次只能从1开始,每条边至少经过一次,有边权,求最小花费 裸上下界费用流...每条边下界为1就行了 注意要加上下界*边权 #include <io ...

  7. BZOJ.1927.[SDOI2010]星际竞速(无源汇上下界费用流SPFA /最小路径覆盖)

    题目链接 上下界费用流: /* 每个点i恰好(最少+最多)经过一次->拆点(最多)+限制流量下界(i,i',[1,1],0)(最少) 然后无源汇可行流 不需要源汇. 注: SS只会连i',求SS ...

  8. BZOJ2324 ZJOI2011营救皮卡丘(floyd+上下界费用流)

    虽然不一定每次都是由编号小的点向编号大的走,但一个人摧毁的顺序一定是从编号小的到编号大的.那么在摧毁据点x的过程中,其只能经过编号小于x的点.并且这样一定合法,因为可以控制其他人先去摧毁所经过的点.那 ...

  9. 【Luogu】P1251餐巾计划(上下界费用流)

    题目链接 学了一下上下界费用流,似乎很nb.但是我说得不好,所以这里给出博客链接. 某dalao的博客 然后这道题的解法就是先用上下界费用流的建图方式连早上和晚上之间的那条边,保证当天一定会有r条或以 ...

随机推荐

  1. 关于手机端h5上传图片配合exif.min.js,processImg.js的使用

    首先这里有个new FileReader()的概念,这是h5新增的,用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件 ...

  2. Thunder——爱阅app(测评人:方铭)

    B.Thunder——爱阅app(测评人:方铭) 一.基于NABCD评论作品,及改进建议 每个小组评论其他小组Alpha发布的作品: 1.根据(不限于)NABCD评论作品的选题: 2.评论作品对选题的 ...

  3. JAVA第一次实验 ——凯撒密码

    课程:Java程序设计 班级:1352 姓名:黄伟业 学号:20135215 成绩:            指导教师:娄嘉鹏  实验日期:2015.4.15 实验密级: 预习程度:  实验时间:19: ...

  4. 使用exe4j将jar包导出为exe

    Exe4J使用方法 此工具是将Java程序包装成exe格式文件工具.(点击exe4j\bin\exe4j.exe文件)启动后如下图所示 如果未注册,则可使用这个注册码:A-XVK209982F-1y0 ...

  5. Struts2 核心流程

    1.Struts2架构图  这是Struts2官方站点提供的Struts 2 的整体结构.  执行流程图 2.Struts2部分类介绍  这部分从Struts2参考文档中翻译就可以了. ActionM ...

  6. 【动态规划】POJ-2385

    一.题目 Description It is a little known fact that cows love apples. Farmer John has two apple trees (w ...

  7. 团队作业4Alpha冲刺(真.三英战吕布团队)

    第一天 2018/6/13 1.1 今日完成任务情况以及遇到的问题. 1.1.1:完成前台部分界面优化,后台进行代码优化 1.1.2团队前台部分js.jquery部分功能实现有难度. 1.2 明天任务 ...

  8. Scrum 7.0

    Sprint回顾 让我们一次比一次做得更好.   1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. ...

  9. XHTML和HTML、CSS 验证器

    XHTML 验证器和 CSS 验证器.需要这些工具去验证你的页面是否符合 XHTML 和 CSS 标准,并且可以使用它查出奇正错误的地方. XHTML 验证器 地址:http://validator. ...

  10. maven下载、安装、卸载以及MyEclipse配置maven

    maven下载 官网下载:http://maven.apache.org/download.cgi 点击链接为官网下载页面,翻到下图所示位置,点击红框选项即可下载 maven安装 1.解压       ...