社区讨论
可爱并非妹纸萌新刚学mcmf 10^-9 s64 pts MLE后四个点球跳
P3381【模板】最小费用最大流参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mlgxvoyt
- 此快照首次捕获于
- 2026/02/11 02:33 上周
- 此快照最后确认于
- 2026/02/11 02:33 上周
CPP
#include<bits/stdc++.h>
using namespace std;
namespace florr
{
#define meow ios_base::sync_with_stdio(false);cin.tie(0)
#define rep(i,l,r,k) for(int i=l;i<=r;i+=k)
#define rrep(i,r,l,k) for(int i=r;i>=l;i-=k)
#define loop(i,st,ed,nxt) for(int i=st;i!=ed;i=nxt)
#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout);
const int inf=0x3f3f3f3f;
const long long infll=0x3f3f3f3f3f3f3f3fll;
const __int128 infi128=(__int128(1)<<126);
__int128 abs(__int128 x){return x<0?-x:x;}
}//namespace florr
using namespace florr;
constexpr int N=5005,M=50005;
int n,m,now[N],h[N],tot=1,cost;
struct{int to,w,cap,nxt;}e[M<<1];
void add(int u,int v,int w,int c)
{
++tot;
e[tot]={v,w,c,h[u]};
h[u]=tot;
}
int dis[N];
bool inq[N];
bool spfa(int s,int t)
{
rep(i,1,n,1)now[i]=h[i],dis[i]=inf,inq[i]=0;
queue<int>q;
q.emplace(s);
dis[s]=0;inq[s]=1;
for(;q.size();q.pop())
{
int u=q.front();inq[u]=0;
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].to,w=e[i].w,cap=e[i].cap;
if(cap&&dis[u]+w<dis[v])
{
dis[v]=dis[u]+w;
if(!inq[v])inq[v]=1,q.emplace(v);
}
}
}
return dis[t]!=inf;
}
int dfs(int u,int t,int f)
{
if(u==t||!f)return f;
int res=0;
for(int &i=now[u];i;i=e[i].nxt)
{
int v=e[i].to,w=e[i].w,cap=e[i].cap;
if(cap&&dis[u]+w==dis[v])
{
int d=dfs(v,t,min(f-res,cap));
e[i].cap-=d;
e[i^1].cap+=d;
cost+=d*w;
res+=d;
if(res==f)return res;
}
}
return res;
}
int dinic(int s,int t)
{
int res=0;
while(spfa(s,t))
res+=dfs(s,t,inf);
return res;
}
void init()
{
}
void solve()
{
int s,t;
cin>>n>>m>>s>>t;
rep(i,1,m,1)
{
int u,v,w,c;
cin>>u>>v>>c>>w;
add(u,v,w,c);
add(v,u,-w,0);
}
cout<<dinic(s,t)<<' '<<cost;
}
signed main()
{
// file("");
meow;
signed T=1;
//cin>>T;
init();
rep(i,1,T,1)solve();
}
/*
1.MLE?
2.array size enough?
3.long long?
4.overflow long long?
5.multiple task cleaned?
6.freopen?
7.TLE?
*/
回复
共 5 条回复,欢迎继续交流。
正在加载回复...