题意:给出n个点,m条边的图,每条边给出清除所需要的代价,起点是1,终点是2,求花费最小的代价清除一些边,使得无法从1走到2。

题解:最大流最小割
看题目意思,就是求最小割,我们用最大流来求。
因为要将清除的边打印出来,其实就是求残余网络中:一个方向还残余容量,另一个方向没有容量的边,但并不是所有这样的边都可以成为割边(wa了),我们用a[]a[]a[]在求最大流的时候另外记录。

以后求割边就用这个板子了,只要最大流的话就用这个。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<map>
#include<sstream>
#include<iomanip>
#define ll long long
using namespace std;
/** 最小割求割边专用* 点的编号从 1 开始* 增加个 flow 数组,保留原矩阵 g, 可用于多次使用最大流*/
const int MAXN = 100;
const int INF = 0x3f3f3f3f;
int g[MAXN][MAXN];//原图的流量
int flow[MAXN][MAXN];//最后求得最大流的流量
int path[MAXN];
int a[MAXN];
int maxflow(int start, int end, int n) {queue<int>q;memset(flow, 0, sizeof(flow));int max_flow = 0;while ("最小割求割边") {memset(a, 0, sizeof(a));a[start] = INF;while (!q.empty())q.pop();q.push(start);while (!q.empty()) {int u = q.front();q.pop();if (u == end) break;for (int v = 1; v <= n; v++)if (!a[v] && flow[u][v] < g[u][v]) {path[v] = u;a[v] = min(a[u], g[u][v] - flow[u][v]);q.push(v);}}if (a[end] == 0)break;for (int u = end; u != start; u = path[u]) {flow[path[u]][u] += a[end];flow[u][path[u]] -= a[end];}max_flow += a[end];}return max_flow;
}
int n, m, u[MAXN * 6], v[MAXN * 6], w;
int main() {while (~scanf("%d%d", &n, &m) && n) {memset(g, 0, sizeof(g));for (int i = 1; i <= m; i++) {scanf("%d%d%d", &u[i], &v[i], &w);g[u[i]][v[i]] = g[v[i]][u[i]] = w;}maxflow(1, 2, n);for (int i = 1; i <= m; i++) {if (a[u[i]] && !a[v[i]] || !a[u[i]] && a[v[i]]) {printf("%d %d\n", u[i], v[i]);}}printf("\n");}return 0;
}

UVA 10480 Sabotage (最大流最小割)相关推荐

  1. UVA - 10480 Sabotage 最小割,输出割法

    UVA - 10480 Sabotage 题意:现在有n个城市,m条路,现在要把整个图分成2部分,编号1,2的城市分成在一部分中,拆开每条路都需要花费,现在问达成目标的花费最少要隔开那几条路. 题解: ...

  2. UVA - 10480 Sabotage(最小割-最大流+输出割边)

    题目链接:点击查看 题目大意:给出一张无向图,1为起点,2为终点,删除每条边都需要权值wi,题目需要求将起点与终点分割为两个部分的最小花费,并且输出方案 题目分析:如果不让输出方案的话就是一个裸的最大 ...

  3. UVA - 10480 Sabotage 输出最小割方案

    题目链接 https://vjudge.net/problem/UVA-10480 题意 无向图求最小割的方案 思路 最小割部分是模版,问题在于最小割的方案如何输出. 首先根据最小割最大流定理,我们跑 ...

  4. Sabotage UVA - 10480 (最小割+求最小割去掉的具体边+ISAP)

    传送门 题意:给定n个点,m条带权无向边,源点s=1,汇点t=2.去掉一些边之后使s,t不连通,求去掉的这些边(而且还要满足去掉的边权和是所有答案中最小的--最小割). n<=50,m<= ...

  5. UVA 10480 - Sabotage (最大流)

    这道题的意思要把一个图分成两部分,要把点1和点2分开.隔断每条边都有一个花费,求最小花费的情况下,应该切断那些边. 这题很明显是最小割,也就是最大流.把1当成源点,2当成汇点. 问题是要求最小割应该隔 ...

  6. UVA 10480 Sabotage

    最小割+输出方案 #include<cstdio> #include<cstring> #include<string> #include<cmath> ...

  7. UVA-10480 Sabotage(最大流最小割定理+输出路径)

    题目链接:UVA-10480 Sabotage The regime of a small but wealthy dictatorship has been abruptly overthrown ...

  8. hihocoder 网络流二·最大流最小割定理

    网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...

  9. nyoj 677 碟战(最大流最小割定理)

    碟战 时间限制:2000 ms  |  内存限制:65535 KB 难度:4 描述 知己知彼,百战不殆!在战争中如果被敌人掌握了自己的机密,失败是必然的.K国在一场战争中屡屡失败,就想到自己的某些城市 ...

  10. 洛谷 - P2598 [ZJOI2009]狼和羊的故事(最大流最小割)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,每个格子都有三种状态:狼.羊和空地,现在需要在相邻方格之间添加篱笆,问最少需要添加多少篱笆才能使得狼和羊分开 题目分析:最大流最小割,建图方 ...

最新文章

  1. Python3和Raspberry Pi最全面最直接的课程
  2. 10.12 telnet:远程登录主机
  3. swift 去json空格_数字货币为什么要去中心化?好处是什么?
  4. 冰原服务器维护,12月2日服务器公告:冰原旅途进发
  5. 【python函数】函数
  6. 开发ffmpeg/live555常见问题错误及解决方法
  7. UVA11398 The Base-1 Number System【进制】
  8. Java 相关计数问题及其实现
  9. java后台管理 开源_12款开源的JAVA后台管理项目
  10. FrameMaker 2019中文版
  11. Linux小游戏——单机掷骰子
  12. 转DICOM学习笔记
  13. Java 回调函数Callback
  14. 微信认证300元发票获取
  15. HCIE面试真题系列17(郝)
  16. Mybatis中resultMap和resultType
  17. 论文阅读: (ICDAR2021 海康威视)LGPMA(表格识别算法)及官方源码对应解读
  18. 顶尖文案app_topys顶尖文案app下载
  19. 从GDC下载数据集、svs无损转png
  20. HGAME 2017 or 2018 PWN levels

热门文章

  1. matlab正反馈系统根轨迹,正反馈回路和非最小相位系统根轨迹
  2. Java工程师成神之路(2018修订版)
  3. 专利技术交底书撰写经历
  4. 最简单的基于FFMPEG的封装格式转换器(致敬雷霄骅)
  5. cdlinux中minidwep的使用
  6. 《英雄联盟》“被手游”背后,是移动电竞的成长期“烦恼”
  7. QT编写的数据转曲线工具
  8. HTML中进行居中设置
  9. 2021计算机基础知识题库,2021年大学计算机基础考试题库-20210418080657.doc-原创力文档...
  10. ABAQUS仿真软件经典案例——水滴入水分析