先最大流跑一遍

在残存网络上把满流边容量+1

非满流边容量设为无穷大

在进行一次最大流即可

(这里的边都不包括建图时用于反悔的反向边)

 #include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<iostream>
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int MAXN=;
int tmp,m,n,S,T,Ans;
int tot=,ans=,Maxflow=;
int h[MAXN];
int pointer[MAXN];
int a[MAXN],path[MAXN];
const int INF=~0U>>;
struct Edge{
int next,to;
int cap,op; //op指向反向边 cap为容量 f为流量
int f;
Edge() {};
Edge(int b,int c,int nxt,int num,int flow) {to=b,cap=c,next=nxt,op=num^,f=flow;}
}edge[MAXN*];
void addedge(int a,int b,int c) //a到b容量为c
{
edge[tot]=Edge(b,c,pointer[a],tot,);
pointer[a]=tot++;
edge[tot]=Edge(a,,pointer[b],tot,); //建立b到a的反向边
pointer[b]=tot++;
}
void Input()
{
memset(pointer,-,sizeof(pointer));
Maxflow=,tot=;
scanf("%d%d",&n,&m);
scanf("%d%d",&S,&T);
int u,v,w;
rep(i,,m)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
}
}
bool Dinic_restruct() //bfs建立层次图
{
queue <int>q;
memset(h,-,sizeof(h));
h[S]=;q.push(S);
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=pointer[u];i!=-;i=edge[i].next)
{
int v=edge[i].to;
if(h[v]==-&&edge[i].cap-edge[i].f)
{
h[v]=h[u]+;
q.push(v);
// printf("v=%d T=%d u=%d\n",v,T,u);
if(v==T) return true;
}
}
}
return false;
}
void Dinic_augment() //dfs找最短增光路
{
int i,j,f,Stop=;
a[Stop]=S;
while(Stop)
{
i=a[Stop];
// printf("augment i=%d\n",i);
if(i!=T) //没到T就走一步,dfs
{
int v;
for(j=pointer[i];j!=-;j=edge[j].next)
{
v=edge[j].to;
if(h[v]==h[i]+&&edge[j].cap-edge[j].f) break;
}
if(j!=-)
{
a[++Stop]=v;
path[Stop]=j;
}
else //回退
{ Stop--;
h[i]=-;
// printf("-1 augment i=%d\n",i);
}
}
else //找到了一条完整的路径
{
f=INF;
for(i=Stop;i>=;i--)
{
int &t=path[i];
if(edge[t].cap-edge[t].f<f)
f=edge[t].cap-edge[t].f;
}
Maxflow+=f;
for(int i=Stop;i>=;i--)
{
int &t=path[i];
edge[t].f+=f;
edge[t^].f-=f; //反向边
if(edge[t].cap-edge[t].f==) Stop=i-;
}
}
}
}
void Dinic()
{
while(Dinic_restruct())
Dinic_augment(); }
int main()
{
// freopen("in.txt","r",stdin);
int T;
scanf("%d",&T);
rep(t1,,T)
{
Input();
Dinic();
// printf("ok? Maxflow=%d\n",Maxflow);
for(int i=;i<tot;i+=)
{
// printf("i=%d to=%d w=%d\n",i,edge[i].to,edge[i].cap-edge[i].f);
if((edge[i].cap-edge[i].f)==)
{
edge[i].cap+=;
}
else
{
edge[i].cap=INF;
}
}
Maxflow=;
Dinic();
printf("%d\n",Maxflow);
}
return ;
}

2017青岛赛区网络赛 Smallest Minimum Cut 求最小割的最小割边数的更多相关文章

  1. hdu6212[区间dp] 2017青岛ACM-ICPC网络赛

    原题: BZOJ1032 (原题数据有问题) /*hdu6212[区间dp] 2017青岛ACM-ICPC网络赛*/ #include <bits/stdc++.h> using name ...

  2. HDU 5884 Sort -2016 ICPC 青岛赛区网络赛

    题目链接 #include <iostream> #include <math.h> #include <stdio.h> #include<algorith ...

  3. HDU 5881 Tea -2016 ICPC 青岛赛区网络赛

    题目链接 题意:有一壶水, 体积在 L和 R之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不大于1. 你无法测量壶里剩下水的 ...

  4. HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛

    题目链接 题意:给定一个数n,求大于n的第一个只包含2357四个因子的数(但是不能不包含其中任意一种),求这个数. 题解:打表+二分即可. #include <iostream> #inc ...

  5. HDU 5879 Cure -2016 ICPC 青岛赛区网络赛

    题目链接 题意:给定一个数n,求1到n中的每一项的平方分之一的累加和. 题解:题目没有给数据范围,而实际上n很大很大超过long long.因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固 ...

  6. 2017 乌鲁木齐赛区网络赛 J Our Journey of Dalian Ends 费用流

    题目描述: Life is a journey, and the road we travel has twists and turns, which sometimes lead us to une ...

  7. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem【状态压缩】

    2017 ACM-ICPC 亚洲区(南宁赛区)网络赛  M. Frequent Subsets Problem 题意:给定N和α还有M个U={1,2,3,...N}的子集,求子集X个数,X满足:X是U ...

  8. HDU 6214.Smallest Minimum Cut 最少边数最小割

    Smallest Minimum Cut Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Oth ...

  9. HDU-6214 Smallest Minimum Cut(最少边最小割)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6214 Problem Description Consider a network G=(V,E) w ...

随机推荐

  1. [洛谷 P3788] 幽幽子吃西瓜

    妖梦费了好大的劲为幽幽子准备了一个大西瓜,甚至和兔子铃仙打了一架.现在妖梦闲来无事,就蹲在一旁看幽幽子吃西瓜.西瓜可以看作一个标准的球体,瓜皮是绿色的,瓜瓤是红色的,瓜皮的厚度可视为0.妖梦恰好以正视 ...

  2. flex布局文本过长不显示省略号

    https://www.cnblogs.com/tgxh/p/6916930.html 解决方法: 给flex子元素添加css: white-space: nowrap; text-overflow: ...

  3. 把旧系统迁移到.Net Core 2.0 日记(11) -- Authentication 认证 claimsIdentity 对比 之前的FormAuthentication

    实现最简单的认证,类似之前的FormAuthentication 在 Startup 的 ConfigureServices() 方法中添加 Authentication 的配置: 这个CookieA ...

  4. 使用web3+solc编译发布以太坊智能合约

    一.环境安装: 1.安装web3工程:npm install web3 2.安装solc工程:npm install solc二.在node环境中使用 先引用所需环境: var fs = requir ...

  5. Struts 2 初步入门(五)之接受参数

    1.使用action的属性接受参数 执行顺序为:前端提交参数--->LoginAction.do进行处理--->处理成功后,跳转到sucess.jsp文件. (1)新建login.jsp文 ...

  6. jackSon注解– @JsonInclude 注解不返回null值字段

    @Data @JsonInclude(JsonInclude.Include.NON_NULL) public class OrderDTO { private String orderId; @Js ...

  7. 学习笔记-AngularJs(七)

    在学习笔记-AngularJs(六)提及了事件处理器和过滤器以及它们的例子,而我们知道之前我是使用$http服务去获得我们需要的json数据,但是$http是比较底层的用法,有时候我们想把获取json ...

  8. isScroll 插件在iPhone 5s 和以上版本

    才加入这个移动项目组三天,解决一个同事(请假),解决一个切换头部tab 选型时,下拉数据,再次切换到另外一个选项时,出现滚动条距离顶部有些距离,当频繁操作会出现距离顶部距离加大问题(第二天衍生出其他b ...

  9. Linux系统默默改变了人类世界的生活方式

    你知道操作系统都有些什么吗?Windows啊.这是我在上大学之前的问答,我当时认为只一种叫做Windows的操作系统,可是我错了,当我上大学以后,作为计算机专业的一名学生的时候我第一次接触到了除Win ...

  10. python if elif else判断语句

    username = 'jack' password = ' _username = input('username') _password = input('password') if userna ...