奶牛通讯 usaco 网络流
这道题很有意思,原题是只需输出最小割集大小,现在oj上改成了输出字典序最小的割集;
题解:可以考虑从小到大删边,若删掉这条边后,最小割变小,保持不变,记录此时的最小割大小;
若最小割不变,恢复这条边;
这样做的原因是什么呢?从小到大可以保证字典序的要求,删完边后若最小割减小,这条边一定在最小割上,删掉它不再恢复可以保证不在把这条通路上的其他边也收进来;
网络流博大精深,还是需要好好体会的;
但在此之前,应该先会敲代码;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
const int maxn=;
const int inf=;
int S,T,n,m;
struct node{
int y,next,re,flow;
}e[maxn<<],e2[maxn<<];
int linkk[maxn],len=;
void insert(int x,int y,int flow){
e[++len].y=y;
e[len].next=linkk[x];
linkk[x]=len;
e[len].flow=flow;
e[len].re=len+;
e[++len].y=x;
e[len].next=linkk[y];
linkk[y]=len;
e[len].flow=;
e[len].re=len-;
}
void init(){
scanf("%d%d%d%d",&n,&m,&S,&T);
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
if(x==S){insert(S,y,inf);insert(y+n,S,inf);}
else if(y==S){insert(S,x,inf);insert(x+n,S,inf);}
else if(x==T){insert(T,y,inf);insert(y+n,T,inf);}
else if(y==T){insert(x+n,T,inf);insert(T,x,inf);}
else {insert(x+n,y,inf);insert(y+n,x,inf);}
}
for(int i=;i<=n;i++)if(S!=i&&T!=i)insert(i,i+n,);
}
bool flag=;
int flow=inf,vis[maxn],ans=,f[maxn];
void dfs(int x,int a){
if(f[x])return;
vis[x]=;
if(x==T){
flag=;flow=a;ans+=flow;return;
}
for(int i=linkk[x];i;i=e[i].next){
if(vis[e[i].y]||(!e[i].flow))continue;
dfs(e[i].y,min(a,e[i].flow));
if(flag){
e[i].flow-=flow;e[e[i].re].flow+=flow;return;
}
}
}
void work(){
ans=;flag=;
while(flag){
flag=;
memset(vis,,sizeof(vis));
dfs(S,inf);
}
}
int main(){
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
init();
memcpy(e2,e,sizeof(e));
work();
cout<<ans<<endl;
int q[maxn],sum=ans,k=ans,tail=;
for(int i=;i<=n;i++){
if(i==S||i==T)continue;
memcpy(e,e2,sizeof(e));
f[i]=;
work();
if(ans<sum)q[++tail]=i,sum=ans;
else f[i]=;
}
sort(q+,q+tail+);
for(int i=;i<=k;i++)printf("%d ",q[i]);
}
奶牛通讯 usaco 网络流的更多相关文章
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
- bzoj1779 [Usaco2010 Hol]Cowwar 奶牛战争(网络流)
1779: [Usaco2010 Hol]Cowwar 奶牛战争 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 302 Solved: 131[Sub ...
- P2402 奶牛隐藏 二分+网络流
floyd搞出两点间最短距离 二分判答案 // luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; ty ...
- CODEVS 3279 奶牛的健美操
3279 奶牛健美操 USACO 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description Farmer John为了保持奶牛们的 ...
- 题解 【USACO 4.2.1】草地排水
[USACO 4.2.1]草地排水 Description 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫 ...
- poj2112 Optimal Milking --- 最大流量,二分法
nx一个挤奶器,ny奶牛,每个挤奶罐为最m奶牛使用. 现在给nx+ny在矩阵之间的距离.要求使所有奶牛挤奶到挤奶正在旅程,最小的个体奶牛步行距离的最大值. 始感觉这个类似二分图匹配,不同之处在于挤奶器 ...
- 光纤通信(codevs 1955)
题目描述 Description 农民John 想要用光纤连通他的N (1 <= N <= 1,000)个牲口棚(编号1..N).但是,牲口棚位于一个大池塘边,他仅可以连通相邻的牲口棚.J ...
- COGS130. [USACO Mar08] 游荡的奶牛[DP]
130. [USACO Mar08] 游荡的奶牛 ★☆ 输入文件:ctravel.in 输出文件:ctravel.out 简单对比时间限制:1 s 内存限制:128 MB 奶牛们在被划 ...
- usaco 地震 && 奶牛观光
Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...
随机推荐
- postgresql 分区表
1.普通方式建立主表 create table tbl_partition( id integer, name ), gender boolean, join_date date, dept ) ) ...
- asp.net实现md5加密方法详解
MD5加密简单的说就是把一段明文 通过某种运算方式 求出密文. 例如:明文为:abcdefg 通过一些列运算 得到 密文 7ac66c0f148de9519b8bd264312c4d64 它具有两个特 ...
- C#生成不重复的随机数
在做能自动生成试卷的考试系统时,常常需要随机生成一组不重复的题目,在.net Framework中提供了一个专门用来产生随机数 http://www.jbxue.com/tags/suijishu.h ...
- mysql实体关系(mysql学习五)
实体关系 表设计 1:1 两个实体表内,存在相同的主键字段 如果记录的主键值等于另一个关系表内记录的主键值,则两条记录的对应为一一对应 优化上称为垂直分割 1:n 一个实体对应多个其他实体(一个班级 ...
- WordPress 主题开发 - (七) 让主题更安全 待翻译
We're just about ready to start building our theme's template files. Before we do this, however, it' ...
- .ascx.g.cs文件不能生成 The name ‘InitializeControl’ does not exist in the current context - Visual Web part Sharepoint
InitializeControl doesn't exsit When using visual studio 2012 for developing SharePoint 2013 Visual ...
- Nginx服务器架构简析
一.Nginx的模块化 模块化结构的思想是一个很久的概念,但也正是成熟的思想造就了Nginx的巨大优越性. 我们知道Nginx从总体上来讲是有许多个模块构成的.习惯将Nginx分为5大模块分别为:核心 ...
- CPU 材料学才是最顶级的学科
cpu的物理组成3部分:逻辑部件.寄存器.控制部件 CPU具有以下4个方面的基本功能:数据通信,资源共享,分布式处理,提供系统可靠性 cpu处理4过程:提取.解码.执行.写回 http://baike ...
- [转]linux时间同步
转自:http://www.jotop.com/2012/vpsinfo_0525/439.html 美国的vps大多都是国外的时间,让我们的程序总是不适应.那么如何调整linux的时间为北京时间?修 ...
- OC中类的扩展介绍
对OC类的扩展总结如下: 共有4个: 1.子类 subClass 作用:可以使用类的继承来增添父类的变量和方法. 写法:在.h文件中 @interface Student : Person 2.分类 ...