网络流五彩斑斓求调
  • 板块学术版
  • 楼主SilverLi
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/3/20 23:09
  • 上次更新2023/10/23 20:58:29
查看原帖
网络流五彩斑斓求调
688783
SilverLi楼主2023/3/20 23:09

五彩斑斓的网络流

WA+RE+TLE+AC

#include <bits/stdc++.h>
using namespace std;
#define int long long
struct edge {int to,cap,rev;};
int read();void add(int,int,int);
const int N=1e5+5,INF=1e17;
int n,m,s,t;
bool vis[N];
vector<edge> g[N];
int dfs(int v,int t,int f) {
	if(v==t)	return f;
	vis[v]=1;
	int tot=g[v].empty()?0:g[v].size();
	for(int j=0;j<tot;++j) {
		edge &i=g[v][j];
		if(!vis[i.to]&&i.cap>0) {
			int d=dfs(i.to,t,min(f,i.cap));
			if(d>0) {
				i.cap-=d;
				g[i.to][i.rev].cap+=d;
				return d;
			}
		}
	}
	return 0;
}
int flow(int s,int t) {
	int ans=0;
	while(true) {
		memset(vis,0,sizeof(vis));
	    int f=dfs(s,t,INF);
		if(f==0)	return ans;
		ans+=f;
	}
} 
signed main() {
	cin>>n>>m>>s>>t;
	int a,b,c;
	while(m--) {
		cin>>a>>b>>c;
		add(a,b,c);
	}
	
	cout<<flow(s,t);
	return 0;
}
void add(int fr,int to,int cap) {
	int s1=g[fr].empty()?0:g[fr].size(),s2=g[to].empty()?0:g[to].size();
	g[fr].push_back(edge{to,cap,s1});
	g[to].push_back(edge{fr,0,s2});
}
int read() {
	int x=0;
	cin>>x;
	return x;
}
2023/3/20 23:09
加载中...