#include<cstdio>
#include<iostream>
#include<cstring>
#define M 6009
#define inf 2139062143
using namespace std;
int head[M],next[*M],u[*M],v[*M],w[*M],fro[*M],n,m,cnt=,d[M],f[M],q[M],fr[M],ans,ans1;
void jia(int a1,int a2,int a3,int a4)
{
cnt++;
fro[cnt]=a1;
u[cnt]=a2;
v[cnt]=a3;
w[cnt]=a4;
next[cnt]=head[a1];
head[a1]=cnt;
return;
}
bool spfa()
{
memset(d,,sizeof(int)*(*n));
d[]=;
f[]=;
q[]=;
int h=,t=;
for(;h<t;)
{
h++;
int p=q[h];
f[p]=;
for(int i=head[p];i;i=next[i])
if(v[i]&&d[u[i]]>d[p]+w[i])
{
d[u[i]]=d[p]+w[i];
fr[u[i]]=i;
if(!f[u[i]])
{
f[u[i]]=;
t++;
q[t]=u[i];
}
}
}
if(d[n]!=inf)
return ;
return ;
}
void mcf()
{
int mx=inf;
for(int i=fr[n];i;i=fr[fro[i]])
mx=min(mx,v[i]);
ans1+=mx;
for(int i=fr[n];i;i=fr[fro[i]])
{
v[i]-=mx;
v[i^]+=mx;
ans+=mx*(w[i]);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int a1,a2,a3;
scanf("%d%d%d",&a1,&a2,&a3);
if(a1!=&&a1!=n)
a1+=n;
jia(a1,a2,,a3);
jia(a2,a1,,-a3);
}
for(int i=;i<n;i++)
{
jia(i,i+n,,);
jia(i+n,i,,);
}
for(;spfa();)
mcf();
printf("%d %d\n",ans1,ans);
return ;
}
#include<cstdio>
#include<iostream>
#include<cstring>
#define M 6009
#define inf 2139062143
using namespace std;
int head[M],next[*M],u[*M],v[*M],w[*M],fro[*M],n,m,cnt=,d[M],f[M],q[M],fr[M],ans,ans1;
void jia(int a1,int a2,int a3,int a4)
{
cnt++;
fro[cnt]=a1;
u[cnt]=a2;
v[cnt]=a3;
w[cnt]=a4;
next[cnt]=head[a1];
head[a1]=cnt;
return;
}
bool spfa()
{
memset(d,,sizeof(int)*(*n));
d[]=;
f[]=;
q[]=;
int h=,t=;
for(;h<t;)
{
h++;
int p=q[h];
f[p]=;
for(int i=head[p];i;i=next[i])
if(v[i]&&d[u[i]]>d[p]+w[i])
{
d[u[i]]=d[p]+w[i];
fr[u[i]]=i;
if(!f[u[i]])
{
f[u[i]]=;
t++;
q[t]=u[i];
}
}
}
if(d[n]!=inf)
return ;
return ;
}
void mcf()
{
int mx=inf;
for(int i=fr[n];i;i=fr[fro[i]])
mx=min(mx,v[i]);
ans1+=mx;
for(int i=fr[n];i;i=fr[fro[i]])
{
v[i]-=mx;
v[i^]+=mx;
ans+=mx*(w[i]);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
int a1,a2,a3;
scanf("%d%d%d",&a1,&a2,&a3);
if(a1!=&&a1!=n)
a1+=n;
jia(a1,a2,,a3);
jia(a2,a1,,-a3);
}
for(int i=;i<n;i++)
{
jia(i,i+n,,);
jia(i+n,i,,);
}
for(;spfa();)
mcf();
printf("%d %d\n",ans1,ans);
return ;
}
不能相交,拆点费用流。