結果
問題 | No.654 Air E869120 |
ユーザー |
![]() |
提出日時 | 2024-04-24 01:17:48 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 11 ms / 2,000 ms |
コード長 | 2,099 bytes |
コンパイル時間 | 1,209 ms |
コンパイル使用メモリ | 113,060 KB |
最終ジャッジ日時 | 2025-02-21 08:47:13 |
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 35 |
ソースコード
#include <iostream>#include <vector>#include <algorithm>#include <map>#include <queue>#include <set>#include <iomanip>using namespace std;typedef long long ll;#define rep(i, n) for(int i = 0; i < (n); i++)template<class T>using vi = vector<T>;template<class T>using vii = vector<vi<T>>;template<class T>using viii = vector<vii<T>>;struct FF {struct edge {int to, rev; ll cap;};int n;vii<edge> to;vi<bool> visited;FF(int n_ = 1) : n(n_), to(n_){}void addedge(int u, int v, ll c) {int su = (int)to[u].size();int sv = (int)to[v].size();to[u].push_back({ v, sv, c });to[v].push_back({ u, su, 0 });}ll dfs(int v, int t, ll f = 1e18) {if (v == t) return f;visited[v] = true;for (edge& nv : to[v]) {if (visited[nv.to] || nv.cap == 0) continue;ll nf = dfs(nv.to, t, min(f, nv.cap));if (nf > 0) {nv.cap -= nf;to[nv.to][nv.rev].cap += nf;return nf;}}return 0; //忘れがち}ll maxflow(int s, int t) {ll res = 0, flow = 0;do {visited.assign(n, false);flow = dfs(s, t);res += flow;} while (flow);return res;}};int main(){int n, m, d;cin >> n >> m >> d;vi<int> u(m), v(m), p(m), q(m); vi<ll> w(m);rep(i, m) cin >> u[i] >> v[i] >> p[i] >> q[i] >> w[i];rep(i, m) u[i]--, v[i]--;rep(i, m) q[i] += d;vi<map<int, int>> mp(n);rep(i, m) {mp[u[i]][p[i]];mp[v[i]][q[i]];}const ll inf = 1e18;FF ff(n * m);int idx = 0;rep(i, n) {bool ng = true;for (auto& elem : mp[i]) {elem.second = idx;if (ng) ng = false;else ff.addedge(idx - 1, idx, inf);idx++;}}rep(i, m) ff.addedge(mp[u[i]][p[i]], mp[v[i]][q[i]], w[i]);ll res = ff.maxflow(0, idx - 1);cout << res << endl;return 0;}