結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2020-06-21 01:57:42 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 18 ms / 2,000 ms |
コード長 | 2,564 bytes |
コンパイル時間 | 1,006 ms |
コンパイル使用メモリ | 98,000 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-03 17:43:17 |
合計ジャッジ時間 | 1,919 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
#include <iostream>#include <algorithm>#include <iomanip>#include <vector>#include <queue>#include <set>#include <map>using namespace std;typedef long long ll;const int INF = 100000000;struct edge {int to, cap, rev;};class FordFolkerson{public:FordFolkerson(int n){N = n;G = vector<vector<edge>>(n, vector<edge>());used = vector<bool>(n, false);}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}));}int max_flow(int s, int t){int flow = 0;while(true){clear_used();int f = dfs(s, t, INF);if(f == 0){break;}flow += f;}return flow;}private:vector<vector<edge>> G;vector<bool> used;int N;void clear_used(){for(int i = 0; i < N; i++) used[i] = false;}int dfs(int v, int t, int f){if(v == t) return f;used[v] = true;for(int i = 0; i < G[v].size(); i++){edge &e = G[v][i];if(!used[e.to] && e.cap > 0){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 W;int N, M;int J[50], C[50];int th = 100000;int main(){ios::sync_with_stdio(false);cin.tie(0);cout << setprecision(10) << fixed;cin >> W >> N;for(int i = 0; i < N; i++){cin >> J[i];}cin >> M;for(int i = 0; i < M; i++){cin >> C[i];}FordFolkerson ff(N+M+2);for(int i = 0; i < N; i++){ff.add_edge(0, i+1, J[i]);}for(int i = 0; i < M; i++){ff.add_edge(N+i+1, N+M+1, C[i]);}for(int i = 0; i < M; i++){set<int> st;int q; cin >> q;for(int j = 0; j < q; j++){int x; cin >> x; x--;st.insert(x);}for(int j = 0; j < N; j++){if(st.count(j) == 0){ff.add_edge(j+1, N+i+1, 100000);}}}if(ff.max_flow(0, N+M+1) >= W) cout << "SHIROBAKO" << endl;else cout << "BANSAKUTSUKITA" << endl;}