刚学网络流,WA#1 #3 #6,求调
查看原帖
刚学网络流,WA#1 #3 #6,求调
661044
_saltFish_楼主2022/8/19 11:35
#include<iostream>
using namespace std;
const int N(205),M(2e3+5);
int n,m,x;
int tot,h[N],cur[N],to[M<<1],nxt[M<<1],flow[M<<1];
inline void add(int u,int v,int flw){
	nxt[++tot]=h[u],to[h[u]=tot]=v,flow[tot]=flw;
	nxt[++tot]=h[v],to[h[v]=tot]=u,flow[tot]=0;
}
int deep[N],q[N];
bool bfs(){
	for(int i=1;i<=n;i++) deep[i]=0;
	deep[1]=1;
	int l=0,r=-1;
	q[++r]=1;
	while(l<=r){
		int u=q[l++];
		for(int i=h[u];i;i=nxt[i]){
			int v=to[i];
			if(deep[v]==0&&flow[i]){
				deep[v]=deep[u]+1;
				q[++r]=v;
				if(v==n) return 1;
			}
		}
	}
	return deep[n]>0;
}
int dfs(int u,int flw){
	if(u==n) return flw;
	int sumflow=0;
	for(int i=cur[u];i;i=nxt[i]){
		cur[u]=i;
		int v=to[i];
		if(deep[v]==deep[u]+1&&flow[i]>0){
			int canflow=dfs(v,min(flw,flow[i]));
			flow[i]-=canflow;flow[i^1]+=canflow;
			flw-=canflow;
			sumflow+=canflow;
			if(!flw) break;
		}
	}
	return sumflow;
}
int ans;
inline void Dinic(){
	while(bfs()){
		for(int i=1;i<=n;i++) cur[i]=h[i];
		ans+=dfs(1,1e18);
	}
}
int main(){
	#ifdef ytxy
	freopen("in.txt","r",stdin);
	#endif
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>x;
	for(int i=1;i<=m;i++){
		int u,v,flw;
		cin>>u>>v>>flw;
		add(u,v,flw);
	}
	Dinic();
	if(ans==0) cout<<"Orz Ni Jinan Saint Cow!";
	else cout<<ans<<' '<<(x-1)/ans+1;
}
2022/8/19 11:35
加载中...