【求助】 我是做这道题里最蒟蒻的
查看原帖
【求助】 我是做这道题里最蒟蒻的
744562
Aya_tt楼主2022/7/8 22:51
#include<bits/stdc++.h>
using namespace std;
const int inf = 20000000;
int cnt,m,n,head[420],dis[420],now[420];
struct qedge{
	int to,nxt,w;
}edge[420];
void add(int x,int y,int z){
	edge[++cnt].to = y;
	edge[cnt].w = z;
	edge[cnt].nxt = head[x];
	head[x] = cnt;
	edge[++cnt].to = x;
	edge[cnt].w = 0;
	edge[cnt].nxt = head[y];
	head[y] = cnt;
}
bool bfs(){
	for(int i = 1;i <= n;i++) dis[i] = inf;
	queue<int> q;
	q.push(1);
	dis[1] = 0;
	now[1] = head[1];
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for(int i = head[u];i;i = edge[i].nxt){
			int v = edge[i].to;
			if(edge[i].w > 0 && dis[v] == inf){
				q.push(v);
				dis[v] = dis[u] + 1;
				now[v] = head[v];
				if(v == n) return true;
			}
		}
	}
	return false;
}
int dfs(int x,int sum){
	if(x == n) return sum;
	int k , res = 0;
	for(int i = now[x];i && sum;i = edge[i].to){
		now[x] = i;
		int v = edge[i].to;
		if(edge[i].w > 0 && (dis[v] == dis[x] + 1)){
			k = dfs(v,min(edge[i].w,sum));
			if(k == 0) dis[v] = inf;
			edge[i].w -= k;
			edge[i^1].w += k;
			res += k;
			sum -= k;
		}
	}
	return res;
}
int main(){
	cnt = 1;
	cin>>m>>n;
	for(int i = 1;i <= m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
	}
	int ans = 0;
	while(bfs()){
		ans += dfs(1,inf);
	}
	cout<<ans;
}

几乎全TLE,就奇怪对了一个点,我却不知道哪里错了

2022/7/8 22:51
加载中...