S->0(K, 0), S->xi(1, 0)(从i点继续走), 0->yi(1, distance(0->i))(从0出发), xi->yi(1, distance(i->j))(i点走向j点), yi->T(1, 0)(每个点必须经过至少一次), 然后跑最小费用最大流, 费用即为答案.

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

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxn = 159;
const int maxv = 309;
const int INF = 0X3F3F3F3F;

int d[maxn][maxn], a[maxv], D[maxv], X[maxn], Y[maxn], N, V, K, S, T;
bool inq[maxv];
queue<int> q;

struct edge {
int to, cap, cost;
edge *next, *rev;
} E[50000], *pt = E, *head[maxv], *p[maxv];

inline void Add(int u, int v, int c, int w) {
pt->to = v;
pt->cap = c;
pt->cost = w;
}

inline void AddEdge(int u, int v, int c, int w) {
}

void Init() {
int m;
scanf("%d%d%d", &N, &m, &K);
memset(d, INF, sizeof d);
V = 1;
S = V++, T = V++;
for(int i = 1; i <= N; i++)
X[i] = V++, Y[i] = V++;
while(m--) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
d[u][v] = d[v][u] = min(d[u][v], w);
}
for(int k = 0; k <= N; k++)
for(int i = 0; i <= N; i++)
for(int j = 0; j <= N; j++) if(k <= max(i, j))
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
for(int i = 1; i <= N; i++) {
if(d[0][i] != INF) AddEdge(0, Y[i], 1, d[0][i]);
}
for(int i = 1; i <= N; i++)
for(int j = i; ++j <= N; )
if(d[i][j] != INF) AddEdge(X[i], Y[j], 1, d[i][j]);
}

int Work() {
int ret = 0;
for(; ; ) {
for(int i = 0; i < V; i++)
inq[i] = false, D[i] = INF;
q.push(S);
a[S] = INF;
D[S] = 0;
while(!q.empty()) {
int x = q.front(); q.pop();
inq[x] = false;
for(edge* e = head[x]; e; e = e->next)
if(D[e->to] > D[x] + e->cost && e->cap) {
D[e->to] = D[x] + e->cost;
a[e->to] = min(a[x], e->cap);
p[e->to] = e;
if(!inq[e->to])
inq[e->to] = true, q.push(e->to);
}
}
if(D[T] == INF) break;
ret += D[T] * a[T];
for(int x = T; x != S; x = p[x]->rev->to) {
p[x]->cap -= a[T];
p[x]->rev->cap += a[T];
}
}
return ret;
}

int main() {
Init();
printf("%d\n", Work());
return 0;
}

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

## 2324: [ZJOI2011]营救皮卡丘

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 1806  Solved: 724
[Submit][Status][Discuss]

## Description

K个人是可以分头行动的，只要有任何一个人在K-1号据点被摧毁之后，经过K号据点，K号据点就被摧毁了。显然的，只要N号据点被摧毁，皮卡丘就得救了。

3 4 2
0 1 1
1 2 1
2 3 100
0 3 1

3
【样例说明】

## BZOJ 2324: [ZJOI2011]营救皮卡丘( floyd + 费用流 )的更多相关文章

1. bzoj 2324 [ZJOI2011]营救皮卡丘（floyd，费用流）

2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1777  Solved: 712[Submit][Stat ...

2. BZOJ2324 [ZJOI2011]营救皮卡丘 【费用流】

题目 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的踏上了营救皮卡丘的道路. 火箭队一共有N个据点,据点之间存在M条双向道 ...

3. BZOJ 2324: [ZJOI2011]营救皮卡丘(带上下限的最小费用最大流)

这道题么= =还是有些恶心的，第一次写带上下界的网络流，整个人都萌萌哒~~~ 首先先预处理得最短路后 直接用费用流做就行了。 第一次写，还是挺好写的= = CODE： #include<cstd ...

4. bzoj 2324: [ZJOI2011]营救皮卡丘

#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #inclu ...

5. 【洛谷P4542】 [ZJOI2011]营救皮卡丘（费用流）

洛谷 题意: 给出$$n$$个点,$$m$$条边,现在有$$k,k\leq 10$$个人从$$0$$号点出发前往$$n$$点. 规定若某个人想要到达$$x$$点,则$$1$$~$$x-1$$号点都有人 ...

6. BZOJ.2324.[ZJOI2011]营救皮卡丘(费用流 Floyd)

BZOJ 洛谷 首先预处理出$$dis[i][j]$$,表示从$$i$$到$$j$$的最短路.可以用$$Floyd$$处理. 注意$$i,j$$是没有大小关系限制的($$i>j$$的$$dis[ ... 7. 【洛谷 P4542】 [ZJOI2011]营救皮卡丘（费用流） 题目链接 用最多经过\(k$$条经过$$0$$的路径覆盖所有点. 定义$$ds[i][j]$$表示从$$i$$到$$j$$不经过大于$$max(i,j)$$的点的最短路,显然可以用弗洛伊德求. 然后每 ...

8. bzoj 2324 ZJOI 营救皮卡丘 费用流

题的大概意思就是给定一个无向图,边有权值,现在你有k个人在0点,要求走到n点,且满足 1:人们可以分头行动,可以停在某一点不走了 2:当你走到x时,前x-1个点必须全部走过(不同的人走过也行,即分两路 ...

9. BZOJ-2324 营救皮卡丘 最小费用可行流+拆下界+Floyd预处理

准备一周多的期末,各种爆炸,回来后状态下滑巨快...调了一晚上+80%下午 2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MB ...

## 随机推荐

1. 【PHP绘图技术&amp;&amp;验证码绘制】

PHP绘图是比较简单的事情,基本绘图如直线.圆.矩形.弧线.填充矩形.填充扇形.非中文字的打印.中文文字的打印在在下面的代码中会纤细讲解. 需要支持中文的字体,可以到windows自带的字体库中找,并 ...

2. 常用命令之ps

ps : process status ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的:如果想对进程时间监控,应该用 top 工具. kill 命令用于杀死进程. linux上 ...

3. spoj 839 Optimal Marks（二进制位，最小割）

[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17875 [题意] 给定一个图,图的权定义为边的两端点相抑或值的 ...

4. yum安装gcc

如果服务器是自己的,并且机器就在身边,那什么都不用说了,缺少gcc顶多就是重新放入安装盘,把开发工具包安装上.但是如果是租的服务器,托管服务 方那帮人又搞不懂你说的啥子gcc,要安装gcc实在是太麻烦 ...

6. 第一章 Linux系统概述

linux是真正的多用户.多任务操作系统,他继承了UNIX系统的主要特征,具有强大的信息处理功能,特别在Internet和Intranet的应用中占有明显优势. 1.1计算机基础知识 计算机分为硬件和 ...

7. .NET Core微服务之基于Jenkins+Docker实现持续部署（Part 1）

Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...

8. python3 hashlib模块

hashlib是一个加密模块,可以将明文加密为密文: md5,sha加密:过程不可逆转.

9. IE8兼容问题

最近做的网站,需要兼容IE8,在这里记录一下,碰到的问题,方便以后查看补充 1.CSS选择器nth-child 不兼容 ul li:nth-child(2){ background-image: ur ...

10. C#中string类型是值类型还是引用类型？（转）

出处:https://www.cnblogs.com/dxxzst/p/8488567.html .Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一 ...