比赛 20250904开学热身赛 评测结果 WWAWWWWWWWWW
题目名称 追查坏牛奶 最终得分 8
用户昵称 wdsjl 运行时间 0.040 s
代码语言 C++ 内存使用 3.78 MiB
提交时间 2025-09-04 20:28:27
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long

const int N=210,M=5010*2,inf=LLONG_MAX;

int n,m,s,t;
int h[N],e[M],ne[M],w[M],idx;
int dep[N],cpy[N];

int g1[N][N],g2[N][N];

inline void add(int a,int b,int x)
{
	e[idx]=b;
	w[idx]=x;
	ne[idx]=h[a],h[a]=idx++;
}

inline int dfs(int u,int lmt)
{
	if(lmt==0 || u==t) return lmt;
	
	int flw=0;
	for(int i=cpy[u];i!=-1;i=ne[i])
	{
		cpy[u]=i;
		
		int j=e[i];
		if(dep[j]!=dep[u]+1 || w[i]==0) continue;
		int f=dfs(j,min(lmt,w[i]));
		if(f==0ll) continue;
		
		flw+=f,lmt-=f;
		w[i]-=f,w[i^1]+=f;
	}
	
	return flw;
}

inline bool bfs()
{
	for(int i=1;i<=n;++i) dep[i]=inf,cpy[i]=h[i];
	
	queue<int> q;
	q.push(s);
	dep[s]=0;
	
	while(q.size())
	{
		int tt=q.front();
		q.pop();
		
		for(int i=h[tt];i!=-1;i=ne[i])
		{
			int j=e[i];
			if(dep[j]<inf || w[i]==0) continue;
			
			dep[j]=dep[tt]+1;
			if(j==t) break;
			q.push(j);
		}
		if(dep[t]<inf) break;
	}
	
	return dep[t]<inf;
}

int dinic()
{
	int res=0;
	while(bfs()) res+=dfs(s,inf);
	return res;
}

void solve()
{
	cin >> n >> m;
	s=1,t=n;
	memset(h,-1,sizeof h); idx=0;
	for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) g1[i][j]=g2[i][j]=0;
	for(int i=1;i<=m;++i)
	{
		int a,b,v;
		cin >> a >> b >> v;
		add(a,b,v); add(b,a,0);
		g1[a][b]+=v;
	}
	
	int ans=dinic();	
	for(int i=1;i<=n;++i)
		for(int j=h[i];j!=-1;j=ne[j])
			g2[i][e[j]]+=w[j];
	
	memset(h,-1,sizeof h); idx=0;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
		{
			if(g1[i][j]==0ll) continue;
			if(g2[i][j]==0ll) add(i,j,1),add(j,i,0);
			else add(i,j,inf),add(j,i,0);
		}
	
	cout << ans << ' ' << dinic() << '\n';
}

signed main(){
	freopen("milk6.in","r",stdin);
	freopen("milk6.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	
	int T=1;
	while(T--)
	{
		solve();
	}
	
	return 0;
}