ZOJ-2587 Unique Attack 最小割的唯一性判定

题意:给定一个无向图,要求判定分离两个点的最小割是否唯一。

解法:在求出最大流的基础上,从源点进行一次搜索,搜索按照未饱和的边进行,得到顶点子集S的顶点个数;再从汇点反向搜索未饱和的边,得到子集T的顶点个数,判定顶点数相加是否等于总共的顶点数。

http://blog.csdn.net/waitfor_/article/details/7330437的文章写的很好,这里截取文中所画的两个图进行说明。

(1)正向搜索集合为S,反向搜索集合为T,cnt1和cnt2都是最小割边。很显然M还存在着最小割边,因为从M到T的残余网络也没有流向T的容量了。

(2)增加E1这部分边的容量将直接导致网络最大流量增加。增加E2和E3则不然。同样M中存在并上E1后为割边的边集。

(3)两条割边完全重合为一条,此时网络中的割边唯一。

 

代码如下:

View Code
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;const int SS = 805, TT = 806;
const int INF = 0x3fffffff;
int N, M, A, B;struct Edge {int v, c, next;    
};
Edge e[30000];
int idx, head[810], lv[810];
int front, tail, que[810];
int vis[810];void insert(int a, int b, int c) {e[idx].v = b, e[idx].c = c;e[idx].next = head[a];head[a] = idx++;
}bool bfs() {memset(lv, 0xff, sizeof (lv));front = tail = lv[SS] = 0;que[tail++] = SS;while (front < tail) {int u = que[front++];for (int i = head[u]; i != -1; i = e[i].next) {int v = e[i].v;if (!(~lv[v]) && e[i].c) {lv[v] = lv[u] + 1;if (v == TT) return true;que[tail++] = v;    }}}return false;
}int dfs(int u, int sup) {if (u == TT) return sup;int tf = 0, f;for (int i = head[u]; i != -1; i = e[i].next) {int v = e[i].v;if (lv[u]+1==lv[v] && e[i].c && (f=dfs(v, min(e[i].c, sup-tf)))) {tf += f;e[i].c -= f, e[i^1].c += f;if (tf == sup) return sup;    }}if (!tf) lv[u] = -1;return tf;
}void dinic() {int ret = 0;while (bfs()) {ret += dfs(SS, INF);    }
//    printf("ret = %d\n", ret); 
}void flood(int u, int &cnt) {for (int i = head[u]; i != -1; i = e[i].next) {if (e[i].c && !vis[e[i].v])    {++cnt;vis[e[i].v] = 1;flood(e[i].v, cnt);}}
}void flood_r(int u, int &cnt) {for (int i = head[u]; i != -1; i = e[i].next) {if (e[i^1].c && !vis[e[i].v])    {++cnt;vis[e[i].v] = 1;flood_r(e[i].v, cnt);}}
}bool query() {int cnta = 0, cntb = 0; // 分别为从两个方向进行搜索而计数memset(vis, 0, sizeof (vis));vis[SS] = vis[TT] = 1;flood(SS, cnta);memset(vis, 0, sizeof (vis));vis[SS] = vis[TT] = 1;flood_r(TT, cntb);return cnta + cntb == N;
}int main() {while (scanf("%d %d %d %d", &N, &M, &A, &B), N|M|A|B) {int a, b, c;idx = 0;memset(head, 0xff, sizeof (head));insert(SS, A, INF), insert(A, SS, 0);insert(B, TT, INF), insert(TT, B, 0);for (int i = 0; i < M; ++i) {scanf("%d %d %d", &a, &b, &c);insert(a, b, c), insert(b, a, c);}dinic();printf(query() ? "UNIQUE\n" : "AMBIGUOUS\n");}return 0;        
}

 

转载于:https://www.cnblogs.com/Lyush/archive/2013/05/01/3053640.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dubbo与springmvc的简单使用

什么是Dubbo&#xff1f; dubbo是阿里巴巴公司开源的高性能优秀服务框架&#xff0c;通过高性能的RPC&#xff08;远程服务调用&#xff09;实现服务的输入输出功能&#xff0c;可以与spring框架无缝整合&#xff1b; 传统的架构所有的模块都在一台服务器上&#xff0c;单台服务…

Mina学习之搭建项目工程目录

为什么80%的码农都做不了架构师&#xff1f;>>> Mina核心分层分为&#xff1a;IoService,IoFilter和IoHandler 搭建项目工程目录&#xff0c;一般应用都包含如下几个部分&#xff1a; 1、server\client 创建mina连接&#xff0c;TCP/IP请求响应模式 …

HttpClient中转上传文件

原文&#xff1a;https://www.cnblogs.com/lyxy/p/5629151.html 场景&#xff1a;客户端(浏览器)A---->选择文件上传---->服务器B---->中转文件---->服务器C---->返回结果---->服务器B---->客户端A 有时候在项目中需要把上传的文件中转到第三方服务器&…

sublime text 2快捷键总结

为什么80%的码农都做不了架构师&#xff1f;>>> 以mac系统为例 一&#xff1a;编辑&#xff08;我们使用一个编辑器最频繁的事情就是编辑了。&#xff09; &#xff08;1&#xff09;基本操作&#xff1a; 【1】CommandA:全选 【2】CommandC:复制 【3】Comman…

Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!

Spring Boot 官网在 2019/03/15 这天发布了 Spring Boot 2.1.5 正式版&#xff0c;栈长表示真跟不上了。。 官宣如下 &#xff1a; https://spring.io/blog/2019/05/15/spring-boot-2-1-5-released 仓库也已经跟上&#xff1a; 那这个版本有什么新功能&#xff1f; 1、增加了 S…

Console-算法[for,if]-有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数...

ylbtech-Arithmetic:Console-算法[for,if]-有5个人坐在一起&#xff0c;问第五个人多少岁&#xff1f;他说比第4个人大2岁。问第4个人岁数1.A&#xff0c;Demo(案例)【程序28】 题目&#xff1a;有5个人坐在一起&#xff0c;问第五个人多少岁&#xff1f;他说比第4个人大2岁。问…

原来MySQl就是这样工作的

一、MySQL简单介绍MySQL是当今最流行的开源数据库管理系统&#xff0c;超过10亿的下载量足可以证明这点。MySQL以其速度、高可靠性、简单易用&#xff0c;广泛应用,一些大型企业也在逐渐应用&#xff0c;如&#xff1a;Facebook、维基百科等网站。MySQL最早由瑞典的MySQL AB公司…

Java生成二进制文件与Postman以二进制流的形式发送请求

业务描述&#xff1a; 模拟终端&#xff08;智能家居&#xff09;发送HTTP POST请求&#xff0c;请求参数为二进制流&#xff1b;而且&#xff0c;二进制流是加密后的数据&#xff0c;因此调试分两步&#xff1a; 1、Java代码生成加密后数据&#xff0c;并保存为二进制流文件 &…

电脑上面玩Android 游戏(.apk文件)

Android模拟器, 下载地址 http://files.cnblogs.com/jx270/BlueStacks-SplitInstaller_native.rar 下载完毕后解压&#xff0c;双击安装, 然后自己去下一些.apk文件&#xff0c;双击即可在电脑上面使用 ps自己配一个手柄,玩游戏不错,

JQuery最佳实践

作者&#xff1a; 阮一峰 日期&#xff1a; 2011年8月 4日 上周&#xff0c;我整理了《jQuery设计思想》。 那篇文章是一篇入门教程&#xff0c;从设计思想的角度&#xff0c;讲解"怎么使用jQuery"。今天的文章则是更进一步&#xff0c;讲解"如何用好jQuery&quo…

Excel-在整个工作簿中查找/替换

13、在整个工作簿中查找/替换 调范围为&#xff1a;工作簿&#xff0c;默认是工作表&#xff1b; 转载于:https://www.cnblogs.com/Formulate0303/p/10885194.html

WCF服务实例激活类型编程与开发(转)

【引言】&#xff1a; 在WCF分布式开发必备知识(2):.Net Remoting这 篇文章里我已经介绍过了Net Remoting相关的概念&#xff0c;其中也包括Net Remoting的激活方式&#xff1a;SingleTon模式、SingleCall模式、客户端激活方式。其实WCF服务的激活方式也与此相似。服务激活方式…

部署Windows Server Update Services 4.0

在 Windows Server 2012 中&#xff0c;WSUS 是可安装以管理和分配更新的服务器角色。WSUS 服务器可以作为组织内其他 WSUS 服务器的更新源。充当更新源的 WSUS 服务器被称为上游服务器。在 WSUS 实现过程中&#xff0c;网络中必须至少有一台 WSUS 服务器连接到 Microsoft 更新…

克罗谈投资策略09

第七章 把注意力集中在长期趋势上&#xff08;2&#xff09; 我接到很多交易者寄来的信和打来的电话&#xff0c;谈论投机交易的各个层面。但是其中匹兹堡一位专业交易者1984年8月所写的一封信&#xff0c;跟上面所说的主题有特别的关联&#xff1a; 大家都说在目前的市场情况下…

《统计学习方法》(李航)读书笔记(转)

《统计学习方法》(李航)读书笔记(转) http://www.cnblogs.com/limitlessun/p/8611103.html#_label4阅读目录 知识点感知机k近邻法朴素贝叶斯决策树logistic回归和最大熵模型支持向量机提升方法EM算法隐马尔可夫模型(HMM)统计学习方法总结神经网络K-MeansBaggingApriori降维方法…

html奇淫技巧 2 教你如何进行图文环绕布局 原创

在群里无意看到了盆友想要布局一个图文环绕的布局&#xff0c;问有没有什么办法实现&#xff0c;上网查了下&#xff0c;都感觉忽悠人的。 js 方面学的不怎么好&#xff0c;但是页面这块是不服输的。 于是就进行了研究&#xff0c;需求如下&#xff1a; 起先看到这张需求我是有…

Lync与Exchange 2013 UM集成:Lync Server配置

在完成了对Exchange的UM功能进行配置之后&#xff0c;我们要把UM的功能与Lync做集成的话还需要在Lync这边做一些配置。首先我们打开Lync前端服务器&#xff0c;然后打开核心组件安装目录下的Support文件夹&#xff0c;然后双击OcsUmUtil。打开之后我们单击加载数据&#xff0c;…

在ubuntu中为程序添加图标快捷键

2019独角兽企业重金招聘Python工程师标准>>> 比如我在我的ubuntu上安装了javaEE eclipse&#xff0c;这个软件直接解压就可以用&#xff0c;这时在导航栏里没有对应图标&#xff0c;在左上角的软件中心中也没有图标&#xff0c;每次启动它得用命令来启动&#xff0c…

更改消息存储的位置

2019独角兽企业重金招聘Python工程师标准>>> 更改消息存储的位置 将消息存储位置更改为另一目录或文件系统。 开始之前 记录部署至要配置的集群的 IBM Lotus Connections 功能部件。 关于此任务 集群成员多于一个节点时&#xff0c;消息存储必须对集群中位于相同物…

【原创】StreamInsight查询系列(三)——基本查询操作之过滤

上篇博文介绍了如何在LINQPad中输出StreamInsight查询结果。这篇文章将主要介绍StreamInsight基础查询操作中的过滤部分。 测试数据准备 为了方便测试查询&#xff0c;我们首先准备一个静态的测试数据源&#xff1a;var weatherData new[] {new { Timestamp new DateTime(201…