二分答案, 然后对于答案m, 把地点分成m层, 对于边(u, v), 第x层的u -> 第x+1层的v 连边. 然后第x层的u -> 第x+1层的u连边(+oo), S->第一层的1(PEOPLE_NUMBER), 每一层N -> T(+oo), 假如最大流是等于人数,就是可行答案.

----------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
#define Id(a, b) ((a) + (b) * N)
 
const int maxn = 59;
const int maxV = 5009;
 
int V, S, T, cnt[maxV], h[maxV];
int d[maxn][maxn], NUM, N;
 
struct edge {
int t, c;
edge *n, *r;
} E[100000], *pt, *e, *H[maxV], *p[maxV], *cur[maxV];
 
inline void Add(int u, int v, int c) {
pt->t = v, pt->c = c, pt->n = H[u], H[u] = pt++;
}
inline void AddEdge(int u, int v, int c) {
Add(u, v, c), Add(v, u, 0);
H[u]->r = H[v], H[v]->r = H[u];
}
 
int maxFlow() {
for(int i = 0; i < V; i++)
cur[i] = H[i], cnt[i] = h[i] = 0;
cnt[0] = V;
int ret = 0;
for(int x = S, A = maxV; h[S] < V; ) {
for(e = cur[x]; e; e = e->n)
if(e->c && h[e->t] + 1 == h[x]) break;
if(e) {
A = min(e->c, A);
p[e->t] = cur[x] = e;
if((x = e->t) == T) {
for(; x != S; x = p[x]->r->t)
p[x]->c -= A, p[x]->r->c += A;
ret += A;
A = maxV;
}
} else {
if(!--cnt[h[x]]) break;
h[x] = V;
for(e = H[x]; e; e = e->n) if(h[e->t] + 1 < h[x] && e->c) {
h[x] = h[e->t] + 1;
cur[x] = e;
}
++cnt[h[x]];
if(x != S) x = p[x]->r->t;
}
}
return ret;
}
 
void Build(int x) {
pt = E;
memset(H, 0, sizeof H);
V = N * x, S = V++, T = V++;
AddEdge(S, 0, NUM);
for(int i = 0; i < x; i++)
AddEdge(Id(N - 1, i), T, maxV);
for(int i = 1; i < x; i++)
for(int j = 0; j < N; j++) {
for(int k = 0; k < N; k++)
if(d[j][k]) AddEdge(Id(j, i - 1), Id(k, i), d[j][k]);
AddEdge(Id(j, i - 1), Id(j, i), maxV);
}
}
 
void Init() {
int m;
scanf("%d%d%d", &N, &m, &NUM);
memset(d, 0, sizeof d);
while(m--) {
int u, v;
scanf("%d%d", &u, &v);
scanf("%d", &d[--u][--v]);
}
}
 
void Work() {
int l = 1, r = 100, ans;
while(l <= r) {
int m = (l + r) >> 1;
Build(m);
if(maxFlow() == NUM) {
ans = m, r = m - 1;
} else
l = m + 1;
}
printf("%d\n", --ans);
}
 
int main() {
Init();
Work();
return 0;
}

----------------------------------------------------------------------------------------

BZOJ 1570: [JSOI2008]Blue Mary的旅行( 二分答案 + 最大流 )的更多相关文章

  1. bzoj 1570: [JSOI2008]Blue Mary的旅行

    Description 在一段时间之后,网络公司终于有了一定的知名度,也开始收到一些订单,其中最大的一宗来自B市.Blue Mary决定亲自去签下这份订单.为了节省旅行经费,他的某个金融顾问建议只购买 ...

  2. bzoj1570: [JSOI2008]Blue Mary的旅行(二分+网络流)

    1570: [JSOI2008]Blue Mary的旅行 题目:传送门 题解: get到拆点新姿势,还是做题太少了...ORZ 因为每天就只能有一个航班,那就不能直接连了,所以要拆点(然后就被卡住了) ...

  3. [BZOJ 1568][JSOI2008]Blue Mary开公司

    [BZOJ 1568][JSOI2008]Blue Mary开公司 题意 \(n\) 次操作, 维护一个一次函数集合 \(S\). 有两种操作: 给定 \(b\) 和 \(k\), 向 \(S\) 中 ...

  4. 【BZOJ1570】[JSOI2008]Blue Mary的旅行 动态加边网络流

    [BZOJ1570][JSOI2008]Blue Mary的旅行 Description 在一段时间之后,网络公司终于有了一定的知名度,也开始收到一些订单,其中最大的一宗来自B市.Blue Mary决 ...

  5. BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )

    二分答案, 然后用哈希去判断... ------------------------------------------------------------------------- #include ...

  6. 数据结构(线段树):BZOJ 1568 [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 602  Solved: 214[Submit ...

  7. bzoj 1568 [JSOI2008]Blue Mary开公司 超哥线段树

    [JSOI2008]Blue Mary开公司 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1808  Solved: 639[Submit][Sta ...

  8. BZOJ 1567: [JSOI2008]Blue Mary的战役地图

    1567: [JSOI2008]Blue Mary的战役地图 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1011  Solved: 578[Sub ...

  9. BZOJ 1567: [JSOI2008]Blue Mary的战役地图 矩阵二维hash

    1567: [JSOI2008]Blue Mary的战役地图 Description Blue Mary最近迷上了玩Starcraft(星际争霸) 的RPG游戏.她正在设法寻找更多的战役地图以进一步提 ...

随机推荐

  1. Hadoop CLI MiniCluster

    CLI MiniCluster Use the climonicluster, users can simply start and stop a single-node hadoop cluster ...

  2. 树形控件CTreeCtrl的使用

    树形控件在界面编程中应用十分普遍,如在资源管理器中和树形结构显示书的文件夹等,我们一步步研究树形控件的使用. 在对话框界面上首先拖动创建一个树,一般我们改变三个属性: Has Buttons显示带有& ...

  3. R基础

    R的对象类型包括数值型(numeric),复数型(complex),逻辑型(logical),字符型(character)和原味型(raw),列表(list)递归结构:函数(function)和表达式 ...

  4. Oracle delete input与delete all input

    oracle官方文档提示:If you had specified DELETE INPUT rather than DELETE ALL INPUT, then RMAN would have on ...

  5. 修复CefSharp浏览器组件中文输入Bug

    概述 最近在win10上开发wpf应用,需要将CefSharp中wpf版本的浏览器组件(版本号v51.0.0)嵌入到应用中,但是发现不支持中文输入,GitHub上有这个问题的描述,参照其提到的方法可以 ...

  6. 阿里大鱼短信接口整合Tp3.2.3开发整理

    阿里大鱼 http://www.alidayu.com/ 的短信接口总体是不错的,别安驹个人认为不管是从性价比还是稳定性上都是跟同类的短信接口好些,毕竟是大公司的东西不会差到哪去.下面把之前开发的短信 ...

  7. 第二章——Parcelable接口的使用(跨进程,Intent传输)

    一.Parcelable类(Android独有的) 简介:Parcelable是一个接口. 作用:是Android提供的序列化接口,实现序列化和反序列化的操作. 二.跨进程使用 步骤一:创建Book类 ...

  8. php-mysql 问题笔记一——在命令行中可以执行的sql语句,无法从php页面页面执行!

    我的情况: 1.由于外键较多,插入数据时,提前关闭外键(SET FOREIGN_KEY_CHECKS=0). 2.所使用的sql语句中,有外键绑定到其他表中,所以无法从php页面插入. 原因分析: S ...

  9. linux arp攻击解决方法 测试很有效

    公司有台centos服务器中了arp攻击,严重影响业务,测试了很多方法都没解决,机房技术也没法处理. 通过下面方法,可以有效抵挡arp攻击.   1.环境 centos6.4   2.执行 arpin ...

  10. JavaScript初学者应知的24条最佳实践(译)

    原文:24 JavaScript Best Practices for Beginners 译者:youngsterxyf (注:阅读原文的时候没有注意发布日期,觉得不错就翻译了,翻译到JSON.pa ...