題目描述
如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。
輸入輸出格式
輸入格式:
第一行包含四個正整數n、m、s、t,分別表示點的個數、有向邊的個數、源點序號、匯點序號。
接下來m行每行包含三個正整數ui、vi、wi,表示第i條有向邊從ui出發,到達vi,邊權為wi(即該邊最大流量為wi)
輸出格式:
一行,包含乙個正整數,即為該網路的最大流。
輸入輸出樣例
輸入樣例#1:
4 5 4 3
4 2 30
4 3 20
2 3 20
2 1 30
1 3 40
輸出樣例#1:
50 說明
時空限制:1000ms,128m
資料規模:
對於30%的資料:n<=10,m<=25
對於70%的資料:n<=200,m<=1000
對於100%的資料:n<=10000,m<=100000
還是最大流,換了個更有效率的演算法~
code:
//by menteur_hxy
#include
#include
#include
#include
#include
using
namespace
std;
int rd()
while(c<='9'&&c>='0') x=x*10+c-'0',c=getchar();
return x*fla;
}const
int max=10010;
const
int inf=0x3f3f3f3f;
int n,m,s,t,ans,cnt=-1,maxflow;
int gap[max],head[max],cur[max],d[max],s[max];
struct edges edge[200010];
void add(int a,int b,int c) ;
head[a]=cnt;
}void bfs() }}
}void isap()
}for(int i=0;i1].flow-=min;
}ans+=min;
top=inser;
u=edge[s[top]^1].to;
continue;
}bool ok=false;
int v;
for(int i=cur[u];i!=-1;i=edge[i].next)
}if(ok)
int min=n;
for(int i=head[u];i!=-1;i=edge[i].next)
return ;
}int main()
isap();
printf("%d",ans);
return
0;}
posted @
2018-04-12 23:31
menteur_hxy 閱讀(
...)
編輯收藏
最大流 ISAP 模板
isap演算法還不懂的戳這裡 最大流入門題傳送門 poj 1273 drainage ditches 下面是isap 當前弧優化 gap優化的 include include include define clear a,x memset a,x,sizeof a define copy a,b m...
模板 網路最大流ISAP
模板 網路最大流isap 建反邊從t到s,bfs跑記錄每個點所在層,gap記錄每層的點數 include using namespace std typedef long long ll const ll max n 1e6 const ll max m 1e6 const ll max e max...
網路流 最大流 ISAP 模板
至於怎麼找到的呢 我才不會說是當初搜網路流乙個個都不理解然後翻到十幾頁點進去看到的 吶 貌似是 國立台灣師範大學 的 這學校是不是這個名 繁體我不會認啊好尷尬 前言 首先不知道這是 isap 還是 sap.作為乙個剛學網路流的蒟蒻 frocean 感覺這網路流真是個玄學的東西 跟著標打模板 0分 0...