我由衷地为我的朋友高兴。哈哈,yian,当你nick name破百上千时,再打“蒟蒻”就会被打的。

  好的,说正事吧。请注意,这还是题解。但我发现,网络流实在是太套路了(怪不得这两年几乎销声匿迹)。我们将分析两道题目,分别代表两类稍微有一点思想意义的题目。

  啊啊啊啊啊。


3438: 小M的作物

Description

小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植可以获得ai的收益,在B中种植可以获得bi的收益,而且,现在还有这么一种神奇的现象,就是某些作物共同种在一块耕地中可以获得额外的收益,小M找到了规则中共有m种作物组合,第i个组合中的作物共同种在A中可以获得c1i的额外收益,共同总在B中可以获得c2i的额外收益,所以,小M很快的算出了种植的最大收益,但是他想要考考你,你能回答他这个问题么?

Input

第一行包括一个整数n
第二行包括n个整数,表示ai第三行包括n个整数,表示bi第四行包括一个整数m接下来m行,
对于接下来的第i行:第一个整数ki,表示第i个作物组合中共有ki种作物,
接下来两个整数c1i,c2i,接下来ki个整数,表示该组合中的作物编号。

Output

只有一行,包括一个整数,表示最大收益

Sample Input

3
4 2 1
2 3 2
1
2 3 2 1 2

Sample Output

11
样例解释A耕地种1,2,B耕地种3,收益4+2+3+2=11。
1<=k< n<= 1000,0 < m < = 1000 保证所有数据及结果不超过2*10^9。

  这道题可能代表了BZOJ上的一类题,就像之前所说过的BZOJ 3894 文理分科一样,与BZOJ 1497 [NOI2006]最大获利也颇有类似之处。

  这是最大负权回路:

  而此题则是另一种策略。好水啊。


1877: [SDOI2009]晨跑

Description

Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑、仰卧起坐等等,不过到目前为止,他坚持下来的只有晨跑。 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街道,Elaxia只能从 一个十字路口跑向另外一个十字路口,街道之间只在十字路口处相交。Elaxia每天从寝室出发 跑到学校,保证寝室编号为1,学校编号为N。 Elaxia的晨跑计划是按周期(包含若干天)进行的,由于他不喜欢走重复的路线,所以 在一个周期内,每天的晨跑路线都不会相交(在十字路口处),寝室和学校不算十字路 口。Elaxia耐力不太好,他希望在一个周期内跑的路程尽量短,但是又希望训练周期包含的天 数尽量长。 除了练空手道,Elaxia其他时间都花在了学习和找MM上面,所有他想请你帮忙为他设计 一套满足他要求的晨跑计划。

Input

第一行:两个数N,M。表示十字路口数和街道数。 
接下来M行,每行3个数a,b,c,表示路口a和路口b之间有条长度为c的街道(单向)。
N ≤ 200,M ≤ 20000。

Output

两个数,第一个数为最长周期的天数,第二个数为满足最长天数的条件下最短的路程长度。

Sample Input

7 10
1 2 1
1 3 1
2 4 1
3 4 1
4 5 1
4 6 1
2 5 5
3 6 6
5 7 1
6 7 1

Sample Output

2 11

  啊啊啊。这是典型的费用流。因为限制访问次数,所以需要拆点,其间边流量为1(源点汇点为inf)费用为0。点之间正常连边,边流量为1(我最开始想用inf,结果因为各种原因WA了)费用为题中所述的c。
  费用流其实就是反复做普通的SPFA(用cost作边权),不过更新时需保证u->v这条弧的cap>flow,另需多维护其来路,其流量。然后flow加上汇点t的流量增量,cost加上汇点t的流量增量*汇点t到源点s的距离(路径cost之和)。然后一条一条边倒回去,处理各边的flow。
  挂个代码吧。
 /**************************************************************
Problem: 1877
User: Doggu
Language: C++
Result: Accepted
Time:1484 ms
Memory:4856 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <algorithm> const int N = ;
const int M = ;
struct Edge {int v,u,upre,cap,flow,cost;}g[M];
int head[N], ne=-;
inline void adde(int u,int v,int cap,int cost) {
g[++ne]=(Edge){v,u,head[u],cap,,cost},head[u]=ne;
g[++ne]=(Edge){u,v,head[v],,,-cost},head[v]=ne;
} int d[N], p[N], a[N];
bool inq[N];
#include <queue>
std::queue<int> q;
bool SPFA(int s,int t,int &flow,int &cost) {
while(!q.empty()) q.pop();
memset(inq,,sizeof(inq));
memset(d,/,sizeof(d));
q.push(s);inq[s]=;d[s]=;p[s]=;a[s]=0x3f3f3f3f;
while(!q.empty()) {
int u=q.front();q.pop();inq[u]=;
for( int i = head[u]; i!=-; i=g[i].upre ) {
int v=g[i].v;
if(g[i].cap>g[i].flow&&d[v]>d[u]+g[i].cost) {
if(!inq[v]) q.push(v),inq[v]=;
d[v]=d[u]+g[i].cost;p[v]=i;a[v]=std::min(a[u],g[i].cap-g[i].flow);
}
}
}
if(d[t]==d[N-]) return false;
flow+=a[t];cost+=d[t]*a[t];
int u = t;
while(u != s) {
g[p[u]].flow+=a[t];
g[p[u]^].flow-=a[t];
u=g[p[u]].u;
}
return true;
}
void MxfMnc(int s,int t) {
int flow = , cost = ;
while(SPFA(s,t,flow,cost));
printf("%d %d\n",flow,cost);
} int main() {
memset(head,-,sizeof(head));
int n, m, a, b, c;scanf("%d%d",&n,&m);
adde(,n+,0x3f3f3f,);for( int i = ; i < n; i++ ) adde(i,n+i,,);
for( int i = ; i <= m; i++ ) {
scanf("%d%d%d",&a,&b,&c);
adde(n+a,b,,c);
}
MxfMnc(,n);
return ;

费用流

BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑的更多相关文章

  1. BZOJ 1877: [SDOI2009]晨跑 费用流

    1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...

  2. BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )

    裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...

  3. 1877: [SDOI2009]晨跑

    1877: [SDOI2009]晨跑 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2007  Solved: 1085[Submit][Status][ ...

  4. BZOJ 3438: 小M的作物( 最小割 )

    orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...

  5. 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...

  6. bzoj 3438: 小M的作物

    Description 背景 小M还是个特么喜欢玩MC的孩纸... 描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一 ...

  7. BZOJ 1877 [SDOI2009]晨跑(多条不交叉最短路)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1877 [题目大意] 找出最多有几条点不重复的从1到N的路,并且要求在满足这个条件的情况 ...

  8. bzoj 1877: [SDOI2009]晨跑

    #include<cstdio> #include<iostream> #include<cstring> #define M 6009 #define inf 2 ...

  9. bzoj 1877 [SDOI2009]晨跑(最小费用最大流)

    Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...

随机推荐

  1. uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)"解决办法

    如果在编译MFC程序的时候出现下列及类似的错误: 1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator ...

  2. 【Docker】第三篇 Docker容器管理

    一.Docker容器概述: 简单理解容器是镜像的一个实例. 镜像是静态的只读文件,而容器的运行需要可写文件层. 二.创建容器 [root@web130 ~]# docker create -it ub ...

  3. 基于tensorflow实现mnist手写识别 (多层神经网络)

    标题党其实也不多,一个输入层,三个隐藏层,一个输出层 老样子先上代码 导入mnist的路径很长,现在还记不住 import tensorflow as tf import tensorflow.exa ...

  4. NO.5:自学python之路------标准库,正则表达式

    引言 时间过的好快呀,终于6级也考完了,学习Python的进度也得赶赶了.好的开始这一周的内容. 正文 模块 模块的本质就是‘.py’结尾的文件,它可以用来从逻辑上组织Python代码,它可以是变量. ...

  5. uptime命令详解

    基础命令学习目录首页 users个数和窗口数一致 原文链接:https://www.cnblogs.com/ultranms/p/9253217.html uptime 另外还有一个参数 -V(大写) ...

  6. Python 标准库中的装饰器

    题目描述 1.简单举例 Python 标准库中的装饰器 2.说说你用过的 Python 标准库中的装饰器 1. 首先,我们比较熟悉,也是比较常用的 Python 标准库提供的装饰器有:property ...

  7. GC知识随笔

    1.  http://blog.csdn.net/column/details/14851.html   地址记录 2.关于Minor GC,Major GC与Full GC 1)  Minor GC ...

  8. 20135231 JAVA实验报告三:敏捷开发与XP实践

    ---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  9. 冲刺One之站立会议8 /2015-5-21

    今天我们把聊天界面做了优化和改进,主要实现了聊天的功能.显示了正在进行通信的成员列表,和当前状态,是否连通和正常通信,大体完成了预期的目标. 燃尽图8

  10. 【最简单】不用ps也可以批量转换图片格式

    不废话直接开始~ 1.新建文件夹,把需要转换的图片放进去,如图: 2.文件夹里建一txt文本,重点来了!txt文本的内容,如果是jpg转为png,则输入“ren *.jpg *.png”,同理png转 ...