1 solutions

  • 0
    @ 2025-11-5 19:34:54

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #define INF 1000000000
    #include<vector>
    #define maxn 220
    using namespace std;
    struct edge{
    	int to,cap,rev;
    };
    vector<edge> map[maxn];
    int used[maxn];
    int n,m;
    int add_edge(int from,int to,int cap)
    {
    	edge e;
    	e.to=to;
    	e.cap=cap;
    	e.rev=map[to].size();
    	map[from].push_back(e);
    	e.to=from;
    	e.cap=0;
    	e.rev=map[from].size()-1;
    	map[to].push_back(e);
    }
    int dfs(int v,int t,int f)
    {
    	if (v==t) return f;
    	used[v]=1;
    	for (int i=0;i<map[v].size();i++)
    	{
    		if (!used[map[v][i].to]&&map[v][i].cap>0)
    		{
    			int d=dfs(map[v][i].to,t,min(f,map[v][i].cap));
    			if (d>0)
    			{
    				map[v][i].cap-=d;
    				map[map[v][i].to][map[v][i].rev].cap+=d;
    				return d;
    			}
    		}
    	}
    	return 0;
    }
    int solve()
    {
    	int i,j,c,k;
    	scanf("%d%d",&n,&m);
    	for (k=0;k<n;k++)
    	{
    		scanf("%d%d%d",&i,&j,&c);
    		add_edge(i,j,c);
    	}
    	int ans=0;
    	for (;;)
    	{
    		memset(used,0,sizeof(used));
    		int f=dfs(1,m,INF);
    		if (f==0) return ans;
    		ans+=f;
    	}
    }
    int main()
    {
    	int ans=solve();
    	printf("%d\n",ans);
    	return 0;
    }
    
    • 1

    Information

    ID
    19416
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By