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 ...
随机推荐
- 2017全面JAVA面试经历总结
https://wenku.baidu.com/view/05e8f71afbd6195f312b3169a45177232f60e474.html?from=search JAVA常见面试题及解答2 ...
- Java压缩技术(一) ZLib
原文:http://snowolf.iteye.com/blog/465433 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法,它与ZI ...
- win7下安装memcache
Windows7 x64在Wamp集成环境下安装Memcache,步骤如下: 1.Memcached-win64 下载 (1)最新版本下载:http://blog.couchbase.com/memc ...
- P1966 火柴排队(逆序对)
P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi) ...
- bzoj1588: [HNOI2002]营业额统计(权值线段树)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 16863 Solved: 6789[Submit][Sta ...
- Redis的事务讲解
1. Redis事务的概念 是什么: 可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序串行化的执行而不会被其他命令插入 能干嘛:一个队列中,一次性.顺序性.排他性的执 ...
- WebService开发-CXF
Web Service 开发方式 Apache CXF 一.关于Apache CXF 在网址http://cxf.apache.org/可以查看到关于Apache CXF的下载及文档介绍,这里不再多做 ...
- 常用的 Maven 命令
maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下. -D 指定参数,如 -Dmaven.test.skip=true 跳过单元测试: -P 指定 ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- 魅族和三星Galaxy 5.0webView 问题Android Crash Report - Native crash at /system/lib/libc.so caused by webvi
解决办法是当前activity 销毁的时候 webView.destroy(); hine: ConnectedState (when=-2ms what= arg1=!CMD_RSSI_POLL : ...