[BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘
/**************************************************************Problem: 2324User: gaotianyu1350Language: C++Result: AcceptedTime:392 msMemory:7620 kb
****************************************************************/#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <iostream>
using namespace std;#define MAXN 350
#define MAXM 300000
#define INF 0x3f3f3f3fint point[MAXN], next[MAXM], v[MAXM], flow[MAXM], cap[MAXM], w[MAXM];
int lastedge[MAXN], dis[MAXN];
bool check[MAXN];
int tot = -1;int n, m, people;
int map[MAXN][MAXN];inline void init()
{memset(map, 0x7f, sizeof(map));memset(point, -1, sizeof(point));memset(next, -1, sizeof(next));tot = -1;
}inline void addedge(int x, int y, int theCap, int theDis)
{tot++;next[tot] = point[x]; point[x] = tot; v[tot] = y; flow[tot] = 0; cap[tot] = theCap; w[tot] = theDis;tot++;next[tot] = point[y]; point[y] = tot;v[tot] = x; flow[tot] = 0; cap[tot] = 0; w[tot] = - theDis;
}inline int addflow(int s, int t)
{int now = t;int ans = INF;while (now != s){int temp = lastedge[now];ans = min(ans, cap[temp] - flow[temp]);now = v[lastedge[now] ^ 1];}now = t;while (now != s){flow[lastedge[now]] += ans;flow[lastedge[now] ^ 1] -= ans;now = v[lastedge[now] ^ 1];}return ans;
}bool spfa(int s, int t, int &maxflow, int &mincost)
{queue<int> q;while (!q.empty()) q.pop();memset(dis, 0x7f, sizeof(dis));memset(check, 0, sizeof(check));dis[s] = 0; check[s] = true; q.push(s);while (!q.empty()){int now = q.front(); q.pop();check[now] = false;for (int temp = point[now]; temp != -1; temp = next[temp])if (flow[temp] < cap[temp] && dis[now] + w[temp] < dis[v[temp]]){dis[v[temp]] = dis[now] + w[temp];lastedge[v[temp]] = temp;if (!check[v[temp]])check[v[temp]] = true, q.push(v[temp]);}}if (dis[t] > INF) return false;int add = addflow(s, t);maxflow += add;mincost += add * dis[t];return true;
}inline int solve(int s, int t)
{int maxflow = 0, mincost = 0;while (spfa(s, t, maxflow, mincost));/*{int tiaoshi = 1;tiaoshi++;}*///printf("mflow :%d\n", maxflow);return mincost;
}inline void build(int start, int end)
{addedge(start, 0, people, 0);for (int i = 1; i <= n; i++){addedge(i, end, 1, 0);addedge(start, i + n, 1, 0);//addedge(i, i + n, INF, 0);}for (int k = 0; k <= n; k++)for (int i = 0; i <= n; i++)for (int j = 0; j <= n; j++)if (i != j){if (map[i][k] < INF && map[k][j] < INF)map[i][j] = min(map[i][j], map[i][k] + map[k][j]);if (k == j && i < j && map[i][j] < INF)addedge(i == 0 ? 0 : i + n, j, INF, map[i][j]); }
}int main()
{//freopen("input.txt", "r", stdin);init();scanf("%d%d%d", &n, &m, &people);for (int i = 1; i <= m; i++){int x, y, z;scanf("%d%d%d", &x, &y, &z);if (z < map[x][y])map[x][y] = map[y][x] = z;}build(2 * n + 1, 2 * n + 2);printf("%d\n", solve(2 * n + 1, 2 * n + 2));
}
转载于:https://www.cnblogs.com/mengfanrong/p/3845444.html
[BZOJ2324][ZJOI2011][最小费用最大流]营救皮卡丘相关推荐
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...
- BZOJ-2324 营救皮卡丘 最小费用可行流+拆下界+Floyd预处理
准备一周多的期末,各种爆炸,回来后状态下滑巨快...调了一晚上+80%下午 2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MB ...
- [bzoj2324][ZJOI2011]营救皮卡丘
来自FallDream的博客,未经允许,请勿转载,谢谢. 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的踏上了营救皮卡丘的 ...
- 乌鲁木齐网络赛J题(最小费用最大流模板)
ACM ICPC 乌鲁木齐网络赛 J. Our Journey of Dalian Ends 2017-09-09 17:24 243人阅读 评论(0) 收藏 举报 分类: 网络流(33) 版权声 ...
- POJ - 2516 Minimum Cost 最小费用最大流
题目链接 题意:给n,m,k表示商店数,储存店数,种类数 然后给n*k表示每个水果店需求每种种类的数量: 表示成 need[i][j] 再给m*k表示每个储存店每种种类数量: 表示成store[i][ ...
- pku The Windy's KM最小权匹配 or 最小费用最大流
http://poj.org/problem?id=3686 题意: 给定n个玩具,有m个车间,给出每个玩具在每个车间的加工所需的时间mat[i][j]表示第i个玩具在第j个车间加工所需的时间,规顶只 ...
- c语言最小费用流_策略算法工程师之路-图优化算法(一)(二分图amp;最小费用最大流)...
目录 1.图的基本定义 2.双边匹配问题 2.1 二分图基本概念 2.2 二分图最大匹配求解 2.3 二分图最优匹配求解 2.4 二分图最优匹配建模实例 2.4.1 二分图最优匹配在师生匹配中的应用 ...
- 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)
题目链接 题目大意: 解题思路: 又是一道裸题 . 首先它要求第iii个点只经过ViViVi那么我们就拆点ai,ai+na_i,a_{i+n}ai,ai+n一个点为入点,一个为出点这条边的流量范围 ...
- 有源汇上下界最小费用可行流 ---- P4043 [AHOI2014/JSOI2014]支线剧情(模板)
题目链接 题目大意: 解题思路: 有源汇上下界最小费用可行流模板题目来着 先建出一个有源汇上下界可行流的图,然后注意建图的时候要把每条边的下界的费用提前加到ans里面 然后再对图跑费用流,就是补齐费用 ...
最新文章
- 线上分享会预告之深度学习在3D场景中的应用
- 2021年码农应该了解的所有机器学习算法
- OS X 使用技巧——不用鼠标就能打开应用程序
- Redis 是并发安全的吗?你确定?
- winform界面嵌入dwg图纸_c# cad中插入另一个dwg的图块
- 【学习笔记】吴恩达机器学习 WEEK 0
- DELPHI编程环境
- 近期GitHub上最热门的开源项目(附链接)
- 《Java技术》第二次作业计科1501赵健宇
- java学习笔记16--异常
- RedMonk 2020 年 Q3 编程语言排行:Python力压Java和PHP,Rust 首次进入前 20
- R和RStudio下载安装详细步骤
- mysql主主复制和mha_MySQL第二章主从复制MHA高可用
- 算法总结之 在数组中找到一个局部最小的位置
- WEBMAX功能简述
- PHP 快递地图模式,使用D3.js创建物流地图的步奏详解
- linux系统 ubuntu 使用GWE图形用户界面调整显卡风扇转速曲线
- BOTTON控件介绍及程序基本框架与皮肤自定义
- 《娱乐至死》读书笔记(part1)--深入一种文化的最有效途径是了解这种文化中用于会话的工具
- 关于word页眉页脚的设置-页码不连续的问题