我错哪了?
查看原帖
我错哪了?
738213
kuikuidadi楼主2025/1/20 08:27
#include<bits/stdc++.h>
#define int long long
#define N 500001
using namespace std;
struct node{
	int v,w,nxt;
}edge[N<<1];
int pre[N],n,m,s,t,head[N],cnt=1,dis[N];
bool vis[N],flag[5001][5001];
void add(int u,int v,int w){
	edge[++cnt]={v,w,head[u]};
	head[u]=cnt;
	edge[++cnt]={u,0,head[v]};
	head[v]=cnt;
}
bool bfs(int s,int t){
	memset(vis,false,sizeof(vis));
	queue<int> q;
	vis[s]=true;
	dis[s]=0x3f3f3f3f;
	q.push(s);
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int i=head[u];i;i=edge[i].nxt){
			int v=edge[i].v;
			if(edge[i].w==0) continue;
			if(vis[v]==true) continue;
			dis[v]=min(dis[u],edge[i].w);
			pre[v]=i;
			q.push(v);
			vis[v]=true;
			if(v==t) return true;
		}
	}
	return false;
}
int EK(int s,int t){
	int maxflow=0;
	while(bfs(s,t)){
		int v=t;
		while(v!=s){
			int i=pre[v];
			edge[i].w-=dis[t];
			edge[i^1].w+=dis[t];
			v=edge[i^1].v;
		}
		maxflow+=dis[t];
	}
	return maxflow;
}
signed main(){
	cin>>n>>m>>s>>t;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		if(flag[u][v]==0){
			add(u,v,w);
			flag[u][v]=cnt;
		}else{
			edge[flag[u][v]-1].w+=w;
		}
	}
	cout<<EK(s,t);
}
2025/1/20 08:27
加载中...