@[rainheavy](/space/show?uid=107646)
```
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct data{
long long a,b,c,cost;
data(long long a=0,long long b=0,long long c=0,long long cost=0){
this->a=a;
this->b=b;
this->c=c;
this->cost=cost;
}
};
vector<data> v;
vector<long long> u[5001];
long long n,m,f[5001],x,y,z,w,s,t,ans1,ans2,fa[5001][2],co[5001];
bool r[5001];
void add(long long a,long long b,long long c,long long d){
v.push_back(data(a,b,c,d));
u[a].push_back(v.size()-1);
v.push_back(data(b,a,0,-d));
u[b].push_back(v.size()-1);
}
void spfa(){
queue<long long> q;
q.push(s);
while(!q.empty()){
x=q.front();
q.pop();
r[x]=false;
for(long long i=0;i<u[x].size();i++){
y=u[x][i];
data da=v[y];
if(co[da.b]>co[x]+da.cost&&da.c){
f[da.b]=min(da.c,f[x]);
co[da.b]=co[x]+da.cost;
fa[da.b][0]=x;
fa[da.b][1]=y;
if(!r[da.b]){
r[da.b]=true;
q.push(da.b);
}
}
}
}
}
void dfs(){
while(1){
for(long long i=1;i<=n;i++){
f[i]=0;
r[i]=false;
co[i]=1000000000000000;
}
f[s]=1000000000000000;
co[s]=0;
spfa();
if(f[t]==0)break;
for(long long i=t;i!=s;i=fa[i][0]){
v[fa[i][1]].c-=f[t];
v[fa[i][1]^1].c+=f[t];
}
ans1=ans1+f[t];
ans2=ans2+f[t]*co[t];
}
}
int main(){
scanf("%lld%lld%lld%lld",&n,&m,&s,&t);
for(long long i=1;i<=m;i++){
scanf("%lld%lld%lld%lld",&x,&y,&z,&w);
add(x,y,z,w);
}
dfs();
printf("%lld %lld",ans1,ans2);
}
```
by suyiheng @ 2019-01-05 22:11:10
您的代码我实在看不懂
by suyiheng @ 2019-01-05 22:11:27