#include #include #include #include #include using namespace std; int inf = 1e9; struct edge{int to, cap, rev;}; vector G[10010]; int level[10010]; int iter[10010]; void add_edge(int from, int to, int cap){ G[from].push_back((edge){to,cap,(int) G[to].size()}); G[to].push_back((edge){from,0,(int) G[from].size()-1}); } void bfs(int s){ memset(level,-1,sizeof(level)); queue Q; level[s] = 0; Q.push(s); while(!Q.empty()){ int v = Q.front(); Q.pop(); for(int i=0;i 0 && level[e.to]<0){ level[e.to] = level[v]+1; Q.push(e.to); } } } } int dfs(int v,int t,int f){ if(v==t) return f; for(int &i=iter[v];i0){ int d = dfs(e.to,t,min(f,e.cap)); if(d>0){ e.cap -= d; G[e.to][e.rev].cap += d; return d; } } } return 0; } int max_flow(int s,int t){ int flow = 0; for(;;){ bfs(s); if(level[t]<0) return flow; memset(iter,0,sizeof(iter)); int f; while((f=dfs(s,t,inf))>0) flow += f; } } struct e{ int to,p,q,w,id; bool operator<(const e& right)const{ return p> v(1010); int N,M,D; int main(){ cin >> N >> M >> D; int a,b,p,q,w; for(int i=1;i<=M;i++){ cin >> a >> b >> p >> q >> w; v[a].push_back({b,p,q,w,i}); } for(int i=1;i<=N;i++) sort(v[i].begin(),v[i].end()); for(int i=1;i<=N;i++){ for(int j=0;j