#include<bits/stdc++.h>
using namespace std;
const int maxm=5e4,maxn=5e3;
struct edg
{
int nxt,u,v;
long long f,w;
}e[maxm+5<<1];
int cnt,fst[maxn+10],i,m,n,pre[maxn+10],s,t,u,v;
bool by[maxm+5<<1],bz[maxn+10];
long long dis[maxn+10],f,mn,mx,summ,sumn,tmp,w;
void ad(int u,int v,long long w,long long f)
{
e[cnt].u=u;
e[cnt].v=v;
e[cnt].w=w;
e[cnt].f=f;
e[cnt].nxt=fst[u];
fst[u]=cnt++;
e[cnt].u=v;
e[cnt].v=u;
e[cnt].f=-f;
e[cnt].nxt=fst[v];
fst[v]=cnt++;
return;
}
long long bfs(int x)
{
int i,y;
queue<int>q;
q.push(x);
memset(pre,-1,sizeof(pre));
memset(by,true,sizeof(by));
memset(bz,true,sizeof(bz));
memset(dis,127,sizeof(dis));
dis[x]=0;
bz[x]=false;
do
{
y=q.front();
q.pop();
bz[y]=true;
for(i=fst[y];~i;i=e[i].nxt)
{
if(e[i].w>0&&dis[e[i].v]>dis[y]+e[i].f)
{
dis[e[i].v]=dis[y]+e[i].f;
pre[e[i].v]=i;
if(by[i]&&bz[e[i].v])
{
q.push(e[i].v);
by[i]=false;
bz[e[i].v]=false;
}
}
}
}while(q.size());
return dis[t];
}
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
memset(fst,-1,sizeof(fst));
for(i=1;i<=m;++i)
{
scanf("%d%d%lld%lld",&u,&v,&w,&f);
ad(u,v,w,f);
}
while(tmp=bfs(s))
{
mn=LLONG_MAX;
if(tmp>=(LLONG_MAX>>1))
break;
for(i=pre[t];~i;i=pre[e[i].u])
mn=min(mn,e[i].w);
for(i=pre[t];~i;i=pre[e[i].u])
{
e[i].w-=mn;
e[i^1].w+=mn;
}
sumn+=mn;
summ+=mn*tmp;
}
printf("%lld %lld",sumn,summ);
return 0;
}
记录,悬赏 5 关