在马屁的帮助下完成查错:(注意全局变量和局部不要搞混,静态查错!!!):#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<limits.h>
#define INF 2147483647
using namespace std;
const int maxn=10002;
struct edge{ int to,point,v,cap,cost,rev; };
edge e[maxn];
int dist[maxn],prevv[maxn],preve[maxn],res,n,m,s,t,cnt,f,d;
bool used[maxn];
void add(int u1,int v1,int c1,int w1,int r){
e[++cnt].to=e[u1].point;e[u1].point=cnt;e[cnt].v=v1;e[cnt].cap=c1;e[cnt].cost=w1;e[cnt].rev=r;}
void adds(int u1,int v1,int c1,int w1){
add(u1,v1,c1,w1,cnt+2);
add(v1,u1,0,-w1,cnt);
}
void init(){
int u1,v1,c1,w1;
scanf("%d%d%d%d%d",&n,&m,&s,&t,&f);
cnt=0;
for (int i=1;i<=m;i++){
scanf("%d%d%d%d",&u1,&v1,&c1,&w1);
adds(u1,v1,c1,w1);
}
}
void dfs(){
d=f;
for (int i=t;i!=s;i=prevv[i]) d=min(d,e[preve[i]].cap);
f-=d;
res+=d*dist[t];
for (int i=t;i!=s;i=prevv[i]){
e[preve[i]].cap-=d;
e[e[preve[i]].rev].cap+=d;
}
}
bool spfa(){
queue<int>q;
fill(dist,dist+n+1,INF);
memset(used,0,sizeof(used));
dist[s]=0; q.push(s); used[s]=1;
while (!q.empty()){
int x=q.front(); q.pop(); used[x]=0;
for (int p=e[x].point;p;p=e[p].to){
if (e[p].cap>0&&dist[e[p].v]>dist[x]+e[p].cost){
dist[e[p].v]=dist[x]+e[p].cost;
prevv[e[p].v]=x;
preve[e[p].v]=p;
if (!used[e[p].v]) {
used[e[p].v]=1;
q.push(e[p].v);
}
}
}
}
if (dist[t]==INF) return 0;
return 1;
}
int min_cost_flow(int s,int t){
res=0;
while (spfa()&&(f>0)) dfs();
return res;
}
int main(){
init();
printf("%d",min_cost_flow(s,t));
return 0;
}