蒟蒻求助
查看原帖
蒟蒻求助
623254
Soul_direction楼主2023/6/11 10:59

爆0求助

/*
	name: luogu B3606
	algorithm: ISAP
	copyright: Soul_direction
*/
#include <iostream>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <string.h>
#define maxv 20010
#define maxe 500010
#define inf 1000000000000000
using namespace std;
typedef long long int ll;
struct edge{
	public:
		int to,nxt;
		ll val;
};
int cnt=0,head[maxv];
int n,m,s,t;
vector<edge>list(maxe);
int dep[maxv],gap[maxv],cur[maxv];
queue<int> q;
ll sum=0;
inline int read(){
    int x=0,f; char ch=0;
    while(!isdigit(ch)) f=(ch=='-'?-1:1),ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return x*f;
}// 快读
inline void add(int toi,int next,ll w){
	list[cnt].to=next;
	list[cnt].val=w;
	list[cnt].nxt=head[toi];
	head[toi]=cnt;++cnt;
}// 链式前向星加边 
inline void init(){
	memset(dep,-1,maxv*sizeof(int));
	memcpy(cur,head,(n+1)* sizeof(int));
}// 初始化
inline void bfs(){
	q.push(t);
	dep[t]=0;
	++gap[dep[t]];
	while(!q.empty()){
		int fro=q.front();
		q.pop();
		for(register int i=head[fro];i!=-1;i=list[i].nxt){
			int ito=list[i].to;
			if(dep[i]==-1){
				dep[i]=dep[fro]+1;
				q.push(ito);
				++gap[dep[ito]];
			}
		}
	}
	return;
}
ll dfs(int u,ll fo){
	if(u==t||fo==0)return fo;
	ll used=0,wer=0;
	for(int i=cur[u];i!=-1;i=list[u].nxt){
		cur[u]=i;
		if(dep[u]==dep[list[i].to]+1&&list[i].val>0){
			wer=dfs(list[i].to,min(fo-used,list[i].val));
			if(wer){
				list[i].val-=wer;
				list[i^1].val+=wer;
				used+=wer;
			}
		}
		if(used==fo)return used;
	}
	if(used>fo)used=fo;
	if(used<fo){
		--gap[dep[u]];
		if(!gap[dep[u]])dep[s]=n+1;
		++gap[++dep[u]];
	}
	return used;
}
ll ISAP(){
	init();
	bfs();
	while(dep[s]<n){
		sum+=dfs(s,inf);
		memcpy(cur,head,(n-1)*sizeof(int));
	}
	return sum;
}
int main(){
	ios::sync_with_stdio(0);
	n=read(),m=read(),s=read(),t=read();
	memset(head,-1,maxv*sizeof(int));
	for(ll i=1,u,v,w;i<=m;i++){
		u=read(),v=read(),w=read();
		add(u,v,w);
		add(v,u,0);
	}
	cout<<ISAP();
	return 0;
}
2023/6/11 10:59
加载中...