表示自从学了网络流,就基本上是一直用dinic

这个题一看就是用最大流,作为常识,两个点之间的最大流等于最小割

但是这个题需要输出割边,然后我就不会了,dinic判流量我觉得也可做,但是一直wa

然后看了看网上的代码,居然用EK暴力,仰慕不已,不过一看数据范围(EK很合理嘛!!!)

关键是用EK可以很容易判断割边

感悟:还是too young too simple 不过让我找回了最初学网络流时的感觉

分析见这里:无限仰慕美女大神

http://blog.csdn.net/ac_lion/article/details/8620676

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <string>
#include <stack>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
#include <utility>
using namespace std;
typedef long long LL;
const int N=;
const int INF=0x3f3f3f3f;
int cap[N][N],flow[N][N],n,m;
int p[N],a[N],x[N*],y[N*];
void maxflow(){
queue<int>q;
memset(flow,,sizeof(flow));
int f=;
while(){
memset(a,,sizeof(a));
while(!q.empty())q.pop();
a[]=INF;q.push();
while(!q.empty()){
int u=q.front();q.pop();
if(u==)break;
for(int v=;v<=n;++v)
if(!a[v]&&flow[u][v]<cap[u][v]){
p[v]=u;a[v]=min(a[u],cap[u][v]-flow[u][v]);
q.push(v);
}
}
if(!a[])break;
for(int u=;u!=;u=p[u]){
flow[p[u]][u]+=a[];
flow[u][p[u]]-=a[];
}
f+=a[];
}
}
int main()
{
while(~scanf("%d%d",&n,&m)){
if(!n&&!m)break;
memset(cap,,sizeof(cap));
for(int i=;i<m;++i){
int w;scanf("%d%d%d",&x[i],&y[i],&w);
cap[x[i]][y[i]]=cap[y[i]][x[i]]=w;
}
maxflow();
for(int i=;i<m;++i){
if((!a[x[i]]&&a[y[i]])||(a[x[i]]&&!a[y[i]]))
printf("%d %d\n",x[i],y[i]);
}
printf("\n");
}
return ;
}

Uva 10480 Sabotage 最大流的更多相关文章

  1. UVA 10480 Sabotage (最大流) 最小割边

    题目 题意: 编写一个程序,给定一个网络规范和破坏每个连接的成本,确定要切断哪个连接,以便将首都和最大的城市分离到尽可能低的成本. 分割-------------------------------- ...

  2. UVA 10480 Sabotage (网络流,最大流,最小割)

    UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...

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

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

  4. J - Sabotage - UVA 10480(最大流)

    题目大意:旧政府有一个很庞大的网络系统,可以很方便的指挥他的城市,起义军为了减少伤亡所以决定破坏他们的网络,使他们的首都(1号城市)和最大的城市(2号城市)不能联系,不过破坏不同的网络所花费的代价是不 ...

  5. UVA - 10480 Sabotage【最小割最大流定理】

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

  6. UVA - 10480 Sabotage (Dinic)

    The regime of a small but wealthy dictatorship has been abruptly overthrown by an unexpected rebel-l ...

  7. UVA 10480 Sabotage (最大流最小割)

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

  8. UVA 10480 Sabotage

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

  9. Sabotage 【UVA - 10480】【最大流割边】

    题目链接 很容易会想到是最大流建边,但是同样的这里有坑点,就是有的人去输出边的时候,去把残余网络的流为0的边给输出了,其实不然,我们应当输出的是那些最后跑到深度为0的不能再走下去的点,只要把他们割了, ...

随机推荐

  1. 【BZOJ 2321】 [BeiJing2011集训]星器

    Description Magic Land上的时间又过了若干世纪…… 现在,人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿,那里简直就是另外一个世界.善于分析与构造的Magic Lan ...

  2. linux驱动系列之makefile

    在linux环境下做嵌入式无论是编写应用程序还是驱动程序等等,都需要用make来进行程序的编译,就需要学会自己编写Makefile.Makefile主要的作用有3点:1.决定编译哪些文件 2.怎样编译 ...

  3. Contest2037 - CSU Monthly 2013 Oct (problem F :ZZY and his little friends)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?cid=2037&pid=5 [题解]: 没想通这题暴力可以过.... [code]: #inclu ...

  4. 2336: [HNOI2011]任务调度 - BZOJ

    一道随机算法的题目 随便用什么随机算法 首先我们可以想到枚举类型3的最终类型,然后再做 先贪心出一个较优的序列,首先我们知道肯定是在A机器上先做完类型1的事件再做类型2的事件,机器B也类似,因为这些没 ...

  5. Android 二维码扫描与生成

    由于源代码比较多,本文不进行讲述,请下载源码. 源码来源于网络,请点击这里下载: http://files.cnblogs.com/wuyou/Android%E4%BA%8C%E7%BB%B4%E7 ...

  6. 【零基础学习iOS开发】【02-C语言】10-函数

    前面已经讲完了C语言中的基本语句和基本运算了,这讲呢,介绍C语言中的重头戏---函数.其实函数这个概念,在大部分高级语言中都是非常重要的,我也已经在<第一个C语言程序>一讲中对函数作了一个 ...

  7. module_init宏解析 linux驱动的入口函数module_init的加载和释放

    linux驱动的入口函数module_init的加载和释放 http://blog.csdn.net/zhandoushi1982/article/details/4927579 void free_ ...

  8. HeadFirst设计模式之状态模式

    一. 1. 2.The State Pattern allows an object to alter its behavior when its internal state changes. Th ...

  9. 新的HTTP框架:Daraja Framework

    https://www.habarisoft.com/daraja_framework.html

  10. SRM 585 DIV1 L2

    记录dp(i, j)表示前i种卡片的排列,使得LISNumber为j的方法数. #include <iostream> #include <vector> #include & ...