Dinic
#include #include #include #include #include #include #include #define maxn 10500#define inf 1e9using namespace std;int n,m,tot=1,head[maxn],S,T,t1,t2,t3;int d[maxn],flag[maxn],cur[maxn],ans,fl[maxn];long long anse,ansv;struct node{ int v,nex,cap;}e[200005];void Q(){ tot=1; memset(head,0,sizeof head);}void lj(int t1,int t2,int t3){ tot++;e[tot].v=t2,e[tot].cap=t3;e[tot].nex=head[t1];head[t1]=tot;}bool BFS(){ for(int i=1;i<=Max;i++)d[i]=inf,flag[i]=0; queue q;q.push(S);d[S]=0; while(!q.empty()){ int x=q.front();q.pop();cur[x]=head[x]; for(int i=head[x];i;i=e[i].nex){ if(d[e[i].v]>d[x]+1&&e[i].cap){ d[e[i].v]=d[x]+1; if(!flag[e[i].v]){ flag[e[i].v]=1;q.push(e[i].v); } } } flag[x]=0; } return d[T]!=inf;}int lian(int k,int a){ //cout< <<' '< < 0){ flow+=f;a-=f; e[i].cap-=f;e[i^1].cap+=f; if(!a)break; } } return flow;}int main(){ scanf("%d%d%d%d",&n,&m,&S,&T); for(int i=1;i<=m;i++){ scanf("%d%d%d",&t1,&t2,&t3); lj(t1,t2,t3);lj(t2,t1,0); } ans=0; while(BFS())ans+=lian(S,inf); cout< <
ISAP(现在不会了)
#include #include #include #include #include #include #include #include
费用流(单路增广)
#include #include #include #include #include #include #include #include
费用流(zkw)
#include #include #include #include #include #include #include #include