/*以核心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+弧优化的更多相关文章

  1. POJ 3469 最小割 Dual Core CPU

    题意: 一个双核CPU上运行N个模块,每个模块在两个核上运行的费用分别为Ai和Bi. 同时,有M对模块需要进行数据交换,如果这两个模块不在同一个核上运行需要额外花费. 求运行N个模块的最小费用. 分析 ...

  2. 网络流SAP+gap+弧优化算法

    poj1273 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 54962   Accept ...

  3. 网络流 最大流—最小割 之SAP算法 详解

    首先引入几个新名词: 1.距离标号: 所谓距离标号 ,就是某个点到汇点的最少的弧的数量(即边权值为1时某个点到汇点的最短路径长度). 设点i的标号为level[i],那么如果将满足level[i]=l ...

  4. poj 2125(最小割)

    题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连 ...

  5. 最大流/最小割模板(isap) POJ1273

    isap模板核心代码: //d[]为距离标号数组,d[i]表示节点i到汇点的距离 //gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数 int dfs(int k,int flow ...

  6. poj2914无向图的最小割模板

    题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...

  7. poj 3204(最小割--关键割边)

    Ikki's Story I - Road Reconstruction Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 7 ...

  8. ISAP 最大流 最小割 模板

    虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...

  9. poj2914 Minimum Cut 全局最小割模板题

    Minimum Cut Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 8324   Accepted: 3488 Case ...

随机推荐

  1. bzoj1123 [POI2008]BLO——求割点子树相乘

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...

  2. javascript从作用域链的角度看闭包

    闭包 闭包是一个能访问外部函数定义的变量的函数. 为什么? 当访问一个变量时,解释器会首先在当前作用域查找标示符,如果没有找到,就去父作用域找,直到找到该变量的标示符或者不再存在父作用域了,这就是作用 ...

  3. Django day11(一) ajax 文件上传 提交json格式数据

    一: 什么是ajax? AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互 ...

  4. 2015 多校赛 第五场 1006 (hdu 5348)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给出一幅无向图,问是否存在一种方案,使得给每条边赋予方向后,每个点的入度与出度之差小于 ...

  5. 5.23Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

    作者:https://www.cnblogs.com/lyjin/p/6389349.html PO:持久对象(persistent object):---po就是在Object/Relation M ...

  6. Redis学习笔记(五)- 数据类型之set类型

    Redis 的set是string类型的无序集合.set元素最大可以包含(2的32次方-1)个元素.set的是通过hash table实现的,所以添加,删除,查找的复杂度都是O(1).hash tab ...

  7. buf.readInt8函数详解

    offset {Number} 0 noAssert {Boolean} 默认:false 返回:{Number} 从该 Buffer 指定的 offset 位置开始读取一个有符号的8位整数值. 设置 ...

  8. Android环境的搭建遇到的问题和解决方案

    安卓环境的搭建,我花了将近一天的时间,在最后终于找到了一个比较好的方案. 第一个问题是安卓的官网(http://developer.android.com)很难登录.SDK和ADT都是需要在官网上下载 ...

  9. Android中DatePicker与TimePicker用法讲解(包括DatePickerDialog与TimePickerDialog)

    实现效果:将DatePicker和TimePicker修改的日期和时间实时显示在程序标题栏上. 1.通过DatePicker和TimePicker来实现 布局为main.xml <?xml ve ...

  10. BPM结束任务

    var pi = tw.system.findProcessInstanceByID("158");for(var i=0; i<pi.tasks.length; i++) ...