背景

NOIP2009,TSOI大爆发,创造了历史,书写了传奇。于是,在SRC的提议下,大家一起去南湖公园探险。
描述

南湖地区的地形错综复杂。这里有茂密的原始森林,有一望无际的湖水,有大自然一切钟灵毓秀的景物。孩子们一旦走散,彼此就再也看不见了,除非彼此选择的道路在前方的某个地方汇合。
在TSOI光环的感召下,大家的审美和价值观趋于一致,对于相同景物感到的愉悦程度可以看做一样的。这种愉悦程度可以在斐波那契奥斯特洛夫斯基参考系(Universal Fibonacci Ostrovsky参考系,以下简称UFO系)下用一个不大于500000的正整数表示出来。而景物都是在道路的交点处出现的。这些道路都是单向的,而且路网中不存在圈。我们从起点开始,无论选择哪条路,都要一直走下去,并且一定能走到终点。
这时,喜欢思考的芥末和擅长分析的大隋与低调的板砖和强悍的Kib找到了实力派的畅牛和博学的DMK,商量着要刁难一下经常打Dota却在NOIP2009中拔得河北省头筹的Zjoe。他们的问题是这样的,假设TSOI小组共有K个人,那么他们在探险中能欣赏到的景物集合的并所包含的愉悦程度的和最大是多少;如果我们想要游览所有的道路交点,那TSOI小组至少要有多少人。
Zjoe很纠结地囧在那里,等待你的帮助。

输入格式

第一行是三个数N、M、K,N表示道路交点个数,M表示道路条数,K表示TSOI小组人数。起始点为1号点,终止点为N号点。
第2到M+1行每行为两个整数U、V,表述U到V号交点之间有一条单向道路。
第M+2到M+N+1行每行一个非负整数P,表示该交点有一个愉悦程度为P的景物。如果该点没有景物,则P为0。
数据保证起点和终点没有景物。

输出格式

两个数,中间用空格隔开。第一个数是K个人在探险中能欣赏到的景物集合的并包含的愉悦程度的和最大值,第二个数是游览所有的交点需要的最少人数。

测试样例1

输入

7 8 2
1 2
1 4
2 3
4 5
4 6
5 3
6 7
3 7
0
2
3
4
5
6
0
输出

18 3
备注

N≤100,M≤2000,K≤100
P≤500000由SRC原创


旧版题解:
第一问是费用流,把1、n分别拆成两个点,中间连容量是人数,费用是0的边,把其他每个点p拆成p1,p2,p1到p2有两条边,一条费用是点的权值,容量1,另一条费用是0,容量无穷大。如果原来点q到点p有一条边,则q2到p1连一条费用0,容量无穷大的边。
第二问可以用最小路径覆盖解决,不过之前要做的处理是,如果p能走到q(无论是直接还是间接),就连一条p到q的边,这个预处理可以用floyd解决,路径覆盖就用匈牙利解决,于是出解
这题数据有问题

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>using namespace std;typedef long long LL;void read(int &x) {char c;bool flag = 0;while((c=getchar())<'0'||c>'9') flag |= (c=='-');x=c-'0';while((c=getchar())>='0'&&c<='9') x = (x<<3)+(x<<1)+c-'0';flag?x=-x:x;
}#define MAXX 500000
#define MAXN 11000
const int inf = ~0u>>2;
typedef int T;struct E {int to,flow,next;T cost;E(int to=0,int flow=0,T cost=0,int next=0):to(to),flow(flow),cost(cost),next(next){}
}g[MAXX];
int tot = 1,fr[MAXN];void Add(int from,int to,int flow,T cost=0) {//cout<<"E:"<<from<<" "<<to<<" "<<flow<<" "<<cost<<"\n";g[++tot] = E(to,flow,cost,fr[from]);fr[from] = tot;g[++tot] = E(from,0,-cost,fr[to]);fr[to] = tot;
}int n,k,m;
LL _cost,_flow;
int d[MAXN];
int st,ed,pere[MAXN],inq[MAXN],fl[MAXN];bool spfa() {static deque<int> q;for (int i = 0; i < ed+10; i++) {inq[i] =  fl[i] = 0;d[i] = -inf;}inq[st] = 1; d[st] = 0; q.push_back(st); fl[st] = inf;while(q.size()) {int t = q.front(); q.pop_front(); inq[t] = 0;for (int i = fr[t]; i; i = g[i].next) {int to = g[i].to;if((d[to] < d[t]+g[i].cost) && g[i].flow) {pere[to] = i;d[to] = d[t]+g[i].cost;fl[to] = min(fl[t],g[i].flow);if(!inq[to]) {if(q.size() && d[q.front()] > d[to]) q.push_front(to);else q.push_back(to);}inq[to] = 1;}}}return d[ed] != -inf;
}void mcmf() {_cost += d[ed]*fl[ed];_flow += fl[ed];for (int t = ed,e = pere[t] ; t != st; ) {g[e].flow -= fl[ed];g[e^1].flow += fl[ed];t = g[e^1].to;e = pere[t];}
}struct WWW{int x,y;}ss[3000];namespace WOW {int d[MAXN],st,ed,sa,cur[MAXN];bool bfs() {memset(d,-1,sizeof(d[0])*(ed+10));queue<int> q;q.push(st); d[st] = 0;while(q.size()) {int t = q.front(); q.pop();for (int i = fr[t]; i; i = g[i].next) {int to = g[i].to;if(d[to] == -1 && g[i].flow) {d[to] = d[t]+1;q.push(to);}}  }return d[ed] != -1;}int dfs(int t,int mf) {if(t == ed || mf == 0) return mf;int tmp = 0;for (int i = fr[t]; i&&mf; i = g[i].next) {if(g[i].flow == 0 || d[g[i].to] != d[t]+1) continue;int f = dfs(g[i].to,min(mf,g[i].flow));mf -= f; tmp += f;g[i].flow -= f; g[i^1].flow += f;}if(!tmp) d[t] = -1;return tmp;}int Dinic(int s,int t) {st = s; ed = t;int max_flow = 0;while(bfs()) max_flow += dfs(st,inf);return max_flow;}void work() {static bool f[101][101];memset(f,0,sizeof f);memset(fr,0,sizeof fr); tot = 1;for (int i = 1; i <= m; i++) {// f[ss[i].x][ss[i].y] = 1;Add(ss[i].x,n+ss[i].y,1);  }
/*    for (int k = 1; k <= n; k++)for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)if(k!=i && i!=j && j!=k)f[i][j] |= (f[i][k]&&f[k][j]);for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++)if(i!=j && f[i][j]) Add(i,n+j,1); */for (int i = 1; i <= n; i++) {Add(0,i,1);Add(n+i,2*n+1,1);}printf("%d",n-Dinic(0,n+n+1));}
}int main() {read(n);read(m);read(k);st = 0; ed = n*2; Add(st,1,k,0);for (int i = 1; i <= n; i++) Add(i,n+i,1,0),Add(i,n+i,inf,0);for (int i = 1; i <= m; i++) read(ss[i].x),read(ss[i].y); for (int i = 1,p; i <= n; i++) {read(p);Add(i,n+i,1,p);Add(i,n+i,inf,0);}for (int i = 1; i <= m; i++) Add(n+ss[i].x,ss[i].y,inf,0);while(spfa()) mcmf();printf("%d ",_cost);// cerr<<"-------------------\n";WOW::work();return 0;
}

[P1149] TSOI南湖探险(费用流)相关推荐

  1. [哈希][费用流]JZOJ 3296 【SDOI2013】刺客信条

    Description 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受到圣殿骑士的杀害,决心成为一名刺客.最终,凭借着他的努力和出众的天赋,成为了杰出的刺 ...

  2. [BZOJ 1221][HNOI2001]软件开发(费用流)

    Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...

  3. 费用流 -- 四川省赛F-Direction Setting [拆边成点+费用流]

    题目链接 题目大意: 就是给你一个nnn个点mmm条边的无向图,每个点有个值是aia_iai​现在你把每条边都赋予一个方向之后这个图就是有向图了,那么设第iii个点的入度是did_idi​,现在设 D ...

  4. UVA1411 Ants(带权二分图的最大完美匹配、zkw费用流)

    题解 给定一些黑点白点,要求一个黑点链接一个白点并且线段不相交(转成二分图最大权匹配使用费用流解决)<训练指南>P351 输出方案:满流即为答案(满流是指这条路的流量跑满了,也就是说edg ...

  5. 餐巾计划问题 线性规划与网络流24题之10 费用流

    相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...

  6. BZOJ1150[CTSC2007]数据备份Backup——模拟费用流+堆+链表

    题目描述 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游 ...

  7. bzoj3171: [Tjoi2013]循环格(费用流)

    传送门 其实这题的建图并不难(虽然我并没有想出来) 首先,每一个点的入度和出度必须为$1$ 那么我们考虑拆点 每个点的出度点向它能到达的点的入度点连边,容量$1$,如果方向为原来的方向则费用$0$否则 ...

  8. 洛谷 - P2045 - 方格取数加强版 - 费用流

    原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...

  9. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

最新文章

  1. 流程管理精英沙龙活动(深圳站)圆满结束
  2. shell:后台运行amp;,日志重定向输出,nohup,grep命令
  3. 深度干货 | 多维分析中的 UV 与 PV
  4. 一些DIV+CSS 命名规范
  5. 分布式对象存储 读书笔记(一) 开始
  6. 将数据库中一张表中数据复制到另一张表
  7. Flex Failed to connect; session timed out.解决办法
  8. Kubernetes 小白学习笔记(7)--kubernetes的架构与组件-Node组件
  9. 5天学会jaxws-webservice编程第一天
  10. 计算机应用基础试卷分析报告,计算机应用基础试卷分析.pdf
  11. 信噪比(dB)换算公式
  12. 分数加减法(C语言)
  13. vue-giant-tree模糊搜索,自动展开匹配子节点,再次搜索可重新加载节点
  14. Python使用Faker库
  15. python里str什么意思_python中str是什么意思
  16. firefox正在安装组件,以便播放此页面上的音频或视频
  17. 使用C#.NET WebBrowser控件导航到不同的网站出现 所请求的资源正在使用中。 (从HRESULT异常:0x800700AA)
  18. [论文笔记] [2008] [ICML] Extracting and Composing Robust Features with Denoising Autoencoders
  19. NCBI参考序列RefSeq
  20. 研究生期间如何做研究:一些建议

热门文章

  1. windows内核情景分析读书笔记-----HYPERSPACE
  2. 选购小主机的伙伴的避坑小建议,特别想要安装Esxi的伙伴。(仅“适合第一次计划入手小主机的朋友”,老师傅们请绕道。)不要浪费时间。
  3. 放下和拿起 解放自己
  4. C++造成内存泄漏的原因汇总:
  5. 通过按钮让号码自动回填到输入框
  6. MounRiver Studio+WCH-Link调通CH32V103C
  7. RocksDB Java API 操作示例
  8. ESC快速关闭windows资源管理器窗口源码
  9. 学生信息管理系统(结构化程序)(C语言)
  10. 20个成功项目管理经验