@[345678910jqka](/user/62075) 洛谷不需要freopen,但是最好把代码贴一下,这样会更好的找出错误
by 05493281ax @ 2022-09-29 00:45:33
我这也是,不知道为啥
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const long long N = 1e5+100;
long long cnt = 0;
struct topo//拓扑序列
{
};
namespace wll//网络流
{
struct Edge
{
long long to, rest, w;
} edge[N * 5];
}
struct eftzdpp//二分图最大匹配 --最大流
{
};
struct eftzxfyzdl//二分图最大权匹配 -- 最小费用最大流
{
long long d[N], p[N], flow, cost, f[N];
vector<long long> g[N];
bool BFS(long long s, long long t)
{
memset(f, 0, sizeof f );
bool inq[N];
memset(inq, 0, sizeof inq);
memset(d, 61, sizeof d);
d[s] = 0;
queue<long long> q;
inq[s] = 1;
f[s] = 1e8;
q.push(s);
while (q.size())
{
long long now = q.front();
q.pop();
inq[now]=0;
for (long long i = 0;i< g[now].size(); ++i)
{
long long &tt = g[now][i];
if ((wll::edge[tt].rest > 0) &&( d[wll::edge[tt].to] > wll::edge[tt].w + d[now]) &&( min(f[now], wll::edge[tt].rest)))
{
f[wll::edge[tt].to] = min(f[now], wll::edge[tt].rest);
d[wll::edge[tt].to] = wll::edge[tt].w + d[now];
p[wll::edge[tt].to] = tt;
if (f[wll::edge[tt].to] && inq[wll::edge[tt].to] == 0) {
q.push(wll::edge[tt].to);
inq[wll::edge[tt].to] = 1;
}
if (wll::edge[tt].to == t) return 1;
}
}
}
return 0;
}
void work(long long s, long long t)
{
long long uuu = 0;
while (BFS(s, t)!=0 )
{
cost += (d[t] * f[t]);
flow += f[t];
long long now = t;
while (now != s )
{
wll::edge[p[now]].rest -= f[t];
// cout << wll::edge[p[now]].rest << "\n";
wll::edge[p[now] ^ 1].rest += f[t];
now = wll::edge[p[now] ^ 1].to;
}
// cout<<now<<"\n";
}
// BFS(s,t);
}
};
//二分图最大独立集,最小点覆盖
struct tarjan//强连通分量,割点,桥,双连通分量,缩点
{
};
struct oula//欧拉路径的存在性和方案输出
{
};
signed main()
{
freopen("input.in","r",stdin);
eftzxfyzdl A;
long long n, m, s, t;
ios::sync_with_stdio(0);
cin >> n >> m;
s=1,t=n;
while (m--)
{
// cout<<cnt<<"\n";
long long u, v, w, c;
cin >> u >> v >> w >> c;
A.g[u].push_back(cnt);
wll::edge[cnt].to = v;
wll::edge[cnt].rest = w;
wll::edge[cnt].w = c;
cnt++;
swap(u, v);
A.g[u].push_back(cnt);
wll::edge[cnt].to = v;
wll::edge[cnt].rest = 0;
wll::edge[cnt].w = -c ;
cnt++;
}
A.work(s, t);
cout << A.flow << " " << A.cost;
}
/*
4 4 4 3
4 2 30 2
2 3 20 1
2 1 30 9
1 3 40 5
*/
```
by YHZ66 @ 2022-10-27 10:15:57