結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2016-10-30 01:06:39 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 27 ms / 2,000 ms |
コード長 | 1,894 bytes |
コンパイル時間 | 759 ms |
コンパイル使用メモリ | 62,848 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-24 23:27:42 |
合計ジャッジ時間 | 1,298 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
#include<iostream>#include<vector>using namespace std;const int maV=100;const int inf=1e5;struct Edge{int to, cut, rev;};vector<Edge> g[maV+2];int used[maV+2];int Furo(int v, int goal, int f){if(v==goal) return f;used[v]=1;for(int j=0; j<g[v].size(); j++){//auto e=g[v][j];if(used[e.to]||e.cut==0) continue;int _f=Furo(e.to, goal, min(f, e.cut));if(_f!=0){g[v][j].cut-=_f;int from;for(int k=0; k<g[e.to].size(); k++){auto _e=g[e.to][k];if(_e.to==v){g[e.to][k].cut+=_f;}}return _f;}}return 0;//}int MaFuro(int start, int goal){int ret=0;while(1){fill((int*)used, (int*)used+maV+2, 0);int f=Furo(start, goal, inf);if(f==0) return ret;ret+=f;}}int main(){int W, N;cin>> W>> N;int J[N];for(int i=0; i<N; i++) cin>> J[i];int M;cin>> M;int C[M];for(int i=0; i<M; i++) cin>> C[i];int X[N][M];fill((int*)X, (int*)X+N*M, 0);for(int i=0; i<M; i++){int Q;cin>> Q;for(int j=0; j<Q; j++){int k;cin>> k;X[k-1][i]=1;}}int start=0, goal=N+M+1;for(int i=0; i<N; i++){g[start].push_back((Edge){i+1, J[i], 0});g[i+1].push_back((Edge){start, 0, i+1});}for(int j=0; j<M; j++){g[(j+1)+N].push_back((Edge){goal, C[j], (j+1)+N});g[goal].push_back((Edge){(j+1)+N, 0, goal});}for(int i=0; i<N; i++){for(int j=0; j<M; j++){if(X[i][j]) continue;g[i+1].push_back((Edge){(j+1)+N, inf, i+1});g[(j+1)+N].push_back((Edge){i+1, 0, (j+1)+N});}}int maf=MaFuro(start, goal);if(maf>=W){cout<< "SHIROBAKO"<< endl;}else{cout<< "BANSAKUTSUKITA"<< endl;}return 0;}