比赛 |
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;
}