結果
問題 | No.654 Air E869120 |
ユーザー | pote-bokko |
提出日時 | 2024-03-07 11:30:02 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,916 bytes |
コンパイル時間 | 2,257 ms |
コンパイル使用メモリ | 227,676 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-09-29 18:39:15 |
合計ジャッジ時間 | 21,548 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,816 KB |
testcase_01 | AC | 2 ms
6,820 KB |
testcase_02 | AC | 1 ms
6,820 KB |
testcase_03 | AC | 2 ms
6,816 KB |
testcase_04 | AC | 2 ms
6,820 KB |
testcase_05 | AC | 1 ms
6,816 KB |
testcase_06 | AC | 1 ms
6,816 KB |
testcase_07 | AC | 2 ms
6,820 KB |
testcase_08 | AC | 1 ms
6,820 KB |
testcase_09 | AC | 1 ms
6,816 KB |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | TLE | - |
testcase_13 | TLE | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | TLE | - |
testcase_19 | WA | - |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | AC | 93 ms
6,820 KB |
testcase_24 | WA | - |
testcase_25 | AC | 7 ms
6,816 KB |
testcase_26 | AC | 40 ms
6,816 KB |
testcase_27 | AC | 6 ms
6,820 KB |
testcase_28 | AC | 11 ms
6,820 KB |
testcase_29 | AC | 4 ms
6,820 KB |
testcase_30 | RE | - |
testcase_31 | RE | - |
testcase_32 | RE | - |
testcase_33 | RE | - |
testcase_34 | RE | - |
testcase_35 | AC | 2 ms
6,820 KB |
testcase_36 | AC | 2 ms
6,816 KB |
testcase_37 | AC | 1 ms
6,820 KB |
testcase_38 | AC | 2 ms
6,816 KB |
testcase_39 | AC | 2 ms
6,820 KB |
ソースコード
// STLのインクルード #include <bits/stdc++.h> using namespace std; // // ACLのインクルード(デフォルトはコメントアウト) // #include <atcoder/all> // using namespace atcoder; // for文の略記 #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define per(i, n) for (ll i = (ll)(n-1); i >= 0; i--) // vectorのソート #define all(x) x.begin(), x.end() // 型の略記 (競プロならでは) using ll = long long; using pii = pair<ll, ll>; using pll = pair<long long, long long>; using vi = vector<ll>; using vl = vector<long long>; using vs = vector<string>; using vc = vector<char>; using vpii = vector<pair<ll, ll>>; using vpll = vector<pair<long long, long long>>; using vpsi = vector<pair<string, ll>>; using vvi = vector<vector<ll>>; using vvpii = vector<vector<pair<ll, ll>>>; using vvl = vector<vector<long long>>; using vvc = vector<vector<char>>; template<typename T> using priority_queue_up = priority_queue<T, vector<T>, greater<T>>; // MOD計算で使う #define MOD 1000000007 #define MOD2 998244353 // YES-NOで答える質問で使う(fがTrueならYes) void cout_yn(bool f){ if(f)cout << "Yes" << endl; else cout << "No" << endl; } // 木の前順走査 void dfs_preorder(ll v, vvi &tree, vi &output){ output.push_back(v); rep(i, tree[v].size()){ dfs_preorder(tree[v][i], tree, output); } } // 木の後順走査 void dfs_postorder(ll v, vvi &tree, vi &output){ rep(i, tree[v].size()){ dfs_preorder(tree[v][i], tree, output); } output.push_back(v); } // n頂点m辺の無向グラフを隣接リストで受け取る. // 頂点番号は1-indexedとして入力される想定. vector<vector<ll>> input_undir_graph(ll n, ll m){ ll a, b; vector<vector<ll>> g(n); rep(i, m){ cin >> a >> b; a--, b--; g[a].push_back(b); // a->b へ向かう辺 g[b].push_back(a); // b->a へ向かう辺 } return g; } // n頂点m辺の有向グラフを隣接リストで受け取る. // 頂点番号は1-indexedとして入力される想定. vector<vector<ll>> input_dir_graph(ll n, ll m){ ll a, b; vector<vector<ll>> g(n); rep(i, m){ cin >> a >> b; a--, b--; g[a].push_back(b); // a->b へ向かう辺 } return g; } #define INF 1e10 struct edge{ ll to, cap, p, q, rev; }; vector<vector<edge>> G; vector<map<ll, ll>> used; ll n, m; ll d; void add_edge(ll u, ll v, ll c, ll p, ll q){ G[u].push_back((edge){v, c, p, q, (ll)(G[v].size())}); G[v].push_back((edge){u, 0, q, p, (ll)(G[u].size()-1)}); } ll dfs(ll v, ll p, ll t, ll tq, ll f){ if(v == t && p == tq){ return f; } used[v][p] = 1; vector<edge> &E = G[v]; rep(i, E.size()){ edge &e = E[i]; if(e.p < p)continue; if(e.cap > 0 && !used[e.to][e.q]){ ll w = dfs(e.to, e.q, t, tq, min(f, e.cap)); if(w > 0){ e.cap -= w; G[e.to][e.rev].cap += w; return w; } } } return 0; } ll max_flow(ll s, ll p, ll t, ll tq){ ll flow = 0; for(;;){ for(ll i=0; i<n; i++)used[i].clear(); ll f = dfs(s, p, t, tq, INF); if(f == 0)break; flow += f; /* cout << flow << endl; */ } return flow; } // main関数 int main(void){ cin >> n >> m >> d; vector<set<ll>> time(n); G.resize(n); used.resize(n); ll u, v, p, q, w; rep(i, m){ cin >> u >> v >> p >> q >> w; u--, v--; add_edge(u, v, w, p, q+d); time[u].insert(p); time[v].insert(q+d); } rep(i, n){ for(auto itr=time[i].begin(); itr!=--(time[i].end()); itr++){ auto nx = itr; ++nx; add_edge(i, i, INF, *itr, *nx); } } cout << max_flow(0, *time[0].begin(), n-1, *(--(time[n-1].end()))) << endl; return 0; }