poj 3469 最小割模板sap+gap+弧优化
/*以核心1为源点,以核心2为汇点建图,跑一遍最大流*/
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define N 21000
#define inf 999999999
struct node {
int u,v,w,next;
}bian[N*40];
int head[N],cur[N],gap[N],stac[N],top,n,sink,source,yong,start,dis[N];
void init() {
memset(head,-1,sizeof(head));
top=0;yong=0;
}
void addedge(int u,int v,int w){
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void bfs() {
queue<int>q;
memset(dis,-1,sizeof(dis));
q.push(sink);
dis[sink]=0;
while(!q.empty()) {
int c=q.front();
int i;
q.pop();
for(i=head[c];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(dis[v]==-1) {
dis[v]=dis[c]+1;
q.push(v);
}
}
}
}
int ISAP() {
int i,sum=0,k;
bfs();
memset(gap,0,sizeof(gap));
for(i=1;i<=n;i++) {
gap[dis[i]]++;
cur[i]=head[i];
}
k=source;
while(dis[source]<n) {
if(k==sink) {
int mi=inf,tep;
for(i=0;i<top;i++){
int e=stac[i];
if(mi>bian[e].w) {
mi=bian[e].w;
tep=i;
}
}
for(i=0;i<top;i++) {
int e=stac[i];
bian[e].w-=mi;
bian[e^1].w+=mi;
}
sum+=mi;
top=tep;
k=bian[stac[top]].u;
}
for(i=cur[k];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(bian[i].w&&dis[k]==dis[v]+1) {
cur[k]=i;
k=v;
stac[top++]=i;
break;
}
}
if(i==-1) {
int m=n,i;
for(i=head[k];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(m>dis[v]&&bian[i].w) {
m=dis[v];
cur[k]=i;
}
}
if(--gap[dis[k]]==0)break;
gap[dis[k]=m+1]++;
if(k!=source)
k=bian[stac[--top]].u;
}
}
return sum;
}
int main() {
int i,a,b,c,m;
while(scanf("%d%d",&n,&m)!=EOF) {
source=n+1;
sink=n+2;
init();
for(i=1;i<=n;i++) {
scanf("%d%d",&a,&b);
addedge(source,i,a);
addedge(i,source,0);
addedge(i,sink,b);
addedge(sink,i,0);
}
while(m--) {
scanf("%d%d%d",&a,&b,&c);
addedge(a,b,c);
addedge(b,a,c);
}
n+=2;
printf("%d\n",ISAP());
}
return 0;
}
poj 3469 最小割模板sap+gap+弧优化的更多相关文章
- POJ 3469 最小割 Dual Core CPU
题意: 一个双核CPU上运行N个模块,每个模块在两个核上运行的费用分别为Ai和Bi. 同时,有M对模块需要进行数据交换,如果这两个模块不在同一个核上运行需要额外花费. 求运行N个模块的最小费用. 分析 ...
- 网络流SAP+gap+弧优化算法
poj1273 Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 54962 Accept ...
- 网络流 最大流—最小割 之SAP算法 详解
首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...
- poj 2125(最小割)
题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连 ...
- 最大流/最小割模板(isap) POJ1273
isap模板核心代码: //d[]为距离标号数组,d[i]表示节点i到汇点的距离 //gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数 int dfs(int k,int flow ...
- poj2914无向图的最小割模板
题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...
- poj 3204(最小割--关键割边)
Ikki's Story I - Road Reconstruction Time Limit: 2000MS Memory Limit: 131072K Total Submissions: 7 ...
- ISAP 最大流 最小割 模板
虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...
- poj2914 Minimum Cut 全局最小割模板题
Minimum Cut Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 8324 Accepted: 3488 Case ...
随机推荐
- pat1013:数素数
https://www.patest.cn/contests/pat-b-practise/1013 #include "stdio.h" #include "math. ...
- [AtCoder3954]Painting Machines
https://www.zybuluo.com/ysner/note/1230961 题面 有\(n\)个物品和\(n-1\)台机器,第\(i\)台机器会为第\(i\)和\(i+1\)个物品染色.设有 ...
- tensorflow在windows操作系统上的安装
在电脑上安装PyCharm和Python3,然后把Python3的安装路径写进系统变量里,Python安装完之后, https://bootstrap.pypa.io/get-pip.py,把这页的代 ...
- Coursera Algorithms week2 基础排序 练习测验: Intersection of two sets
题目原文: Given two arrays a[] and b[], each containing n distinct 2D points in the plane, design a subq ...
- mybatis中if标签判断字符串相等问题
mybatis 映射文件中,if标签判断字符串sfyx变量是否是字符串Y的时候,发现并不管用: <if test="sfyx=='Y' "> and 1=1 </ ...
- go之数组
一.数组概念 go语言提供了数组类型的数据结构 数组是具有 [唯一类型] 的一组 [固定长度] 的数据项序列,这种类型可以是任意类型 二.数组声明 var variable_name [SIZE]va ...
- CALayer帧动画
CALayer帧动画 _sunLayer = [[CALayer alloc]init]; _sunLayer.contents = (id)[UIImage imageNamed:@"su ...
- 5.29clone项目地址
- 12.0&12.1 Xcode开发包
12.1开发包下载链接 12.0开发包下载链接 12.1(16B91)开发包下载链接 Finder打开后,按command+shift+G前往这个地址: /Applications/Xcode.app ...
- Unity引擎GUI之Input Field
InputField 文本输入组件,本文练习InputField的属性及事件 一.属性 1 Interactable: 是否禁用 Transition:过渡方式 Normal Color 正常的未有任 ...