結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー | sugim48 |
提出日時 | 2015-04-02 23:37:17 |
言語 | C++11 (gcc 11.4.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,211 bytes |
コンパイル時間 | 905 ms |
コンパイル使用メモリ | 97,832 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-04 01:27:40 |
合計ジャッジ時間 | 1,615 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
6,816 KB |
testcase_01 | AC | 1 ms
6,944 KB |
testcase_02 | AC | 2 ms
6,944 KB |
testcase_03 | WA | - |
testcase_04 | AC | 2 ms
6,940 KB |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | AC | 2 ms
6,944 KB |
testcase_08 | AC | 2 ms
6,940 KB |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | AC | 9 ms
6,944 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,940 KB |
testcase_15 | AC | 1 ms
6,940 KB |
コンパイルメッセージ
main.cpp: In member function ‘void flow_network::add_edge(int, int, ll)’: main.cpp:40:42: warning: narrowing conversion of ‘(&((flow_network*)this)->flow_network::G.std::vector<std::vector<flow_network::edge> >::operator[](((std::vector<std::vector<flow_network::edge> >::size_type)v)))->std::vector<flow_network::edge>::size()’ from ‘std::vector<flow_network::edge>::size_type’ {aka ‘long unsigned int’} to ‘int’ [-Wnarrowing] 40 | edge e = {v, c, G[v].size()}, _e = {u, 0, G[u].size()}; | ~~~~~~~~~^~ main.cpp:40:68: warning: narrowing conversion of ‘(&((flow_network*)this)->flow_network::G.std::vector<std::vector<flow_network::edge> >::operator[](((std::vector<std::vector<flow_network::edge> >::size_type)u)))->std::vector<flow_network::edge>::size()’ from ‘std::vector<flow_network::edge>::size_type’ {aka ‘long unsigned int’} to ‘int’ [-Wnarrowing] 40 | edge e = {v, c, G[v].size()}, _e = {u, 0, G[u].size()}; | ~~~~~~~~~^~
ソースコード
#define _USE_MATH_DEFINES #include <algorithm> #include <cstdio> #include <functional> #include <iostream> #include <cfloat> #include <climits> #include <cstdlib> #include <cstring> #include <cmath> #include <map> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <time.h> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> i_i; typedef pair<ll, int> ll_i; typedef pair<double, int> d_i; typedef pair<ll, ll> ll_ll; typedef pair<double, double> d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; struct flow_network { int n; struct edge { int v; ll c; int rev; }; vector< vector<edge> > G; flow_network(int _n) : n(_n), G(_n) {} void add_edge(int u, int v, ll c) { edge e = {v, c, G[v].size()}, _e = {u, 0, G[u].size()}; G[u].push_back(e); G[v].push_back(_e); } ll dfs(int u, int t, ll f, vector<bool>& vis) { if (u == t) return f; vis[u] = true; for (int i = 0; i < G[u].size(); i++) { edge& e = G[u][i]; if (vis[e.v] || e.c == 0) continue; ll d = min(e.c, dfs(e.v, t, min(f, e.c), vis)); if (d == 0) continue; e.c -= d; G[e.v][e.rev].c += d; return d; } return 0; } ll max_flow(int s, int t) { ll res = 0; for (;;) { vector<bool> vis(n); ll f = dfs(s, t, LLONG_MAX, vis); if (f == 0) return res; res += f; } } }; int main() { int W; cin >> W; int N; cin >> N; vector<int> J(N); for (int i = 0; i < N; i++) cin >> J[i]; int M; cin >> M; vector<int> C(M); for (int j = 0; j < M; j++) cin >> C[j]; vector<set<int> > X(M); for (int j = 0; j < M; j++) { int Q; cin >> Q; while (Q--) { int x; cin >> x; X[j].insert(x - 1); } } flow_network fn(N + M + 3); int s = N + M, t = N + M + 1, ss = N + M + 2; for (int i = 0; i < N; i++) fn.add_edge(s, i, J[i]); for (int j = 0; j < M; j++) fn.add_edge(N + j, t, C[j]); for (int j = 0; j < M; j++) for (int i = 0; i < N; i++) { if (X[j].count(i)) continue; fn.add_edge(i, N + j, 10000); } fn.add_edge(ss, s, W); int x = fn.max_flow(s, t); cout << (x == W ? "SHIROBAKO" : "BANSAKUTSUKITA") << endl; }