为什么 死循环了
查看原帖
为什么 死循环了
422996
HeCao2008楼主2022/12/27 23:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=214,inf=1ll<<62;
int val[maxn],visit[maxn],head[maxn],to[maxn],nxt[maxn];
int n,m,s,t;
int cnt=0;
queue < int > q;
void add1(int u,int v,int w){
	nxt[cnt]=head[u];
	to[cnt]=v;
	val[cnt]=w;
	head[u]=cnt++;
}
void add2(int u,int v,int w){
	add1(u,v,w);
	add1(v,u,0);
}
bool bfs(){
	q=queue< int > ();
	memset(visit,0,sizeof(visit));
	q.emplace(s);
	visit[s]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		for(int i=head[u];~i;i=nxt[i]){
			if(!visit[to[i]]&&val[i]){
				visit[to[i]]=visit[u]+1;
				q.emplace(to[i]);
				if(to[i]==t)return 1;
			}
		}
	}return false;
} 
int dfs(int u,int sum){
	if(u==t)return sum;
	int now=sum;
	for(int i=head[u];~i;i=nxt[i]){
		if(visit[to[i]]==visit[u]+1&&val[i]){
			int fa=dfs(to[i],min(now,val[i]));
			if(!fa)visit[to[i]]=0;
			else{
				now-=fa;
				val[i]-=fa;
				val[i^1]+=fa;
			}
		}
	}
	if(now==sum)visit[u]=0;
	return sum-now;
}
int dinic(){
	int sum=0;
	while(bfs()){
		sum+=dfs(s,inf);
	}
	return sum;
}
signed main(){
	ios::sync_with_stdio(false);
	cin>>n>>m>>s>>t;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		add2(u,v,w);
	}
	cout<<dinic();
	return 0;
}
2022/12/27 23:53
加载中...