結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2015-04-03 01:28:23 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 2,416 bytes |
コンパイル時間 | 834 ms |
コンパイル使用メモリ | 94,208 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-04 01:31:41 |
合計ジャッジ時間 | 1,436 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
#include<iostream>#include<fstream>#include<sstream>#include<string>#include<cstdio>#include<cstdlib>#include<cstring>#include<ctime>#include<stack>#include<queue>#include<set>#include<map>#include<vector>#include<list>#include<algorithm>#include<utility>#include<complex>using namespace std;#define reE(i,a,b) for(auto (i)=(a);(i)<=(b);(i)++)#define rE(i,b) reE(i,0,b)#define reT(i,a,b) for(auto (i)=(a);(i)<(b);(i)++)#define rT(i,b) reT(i,0,b)#define rep(i,a,b) reE(i,a,b);#define rev(i,a,b) for(auto (i)=(b)-1;(i)>=(a);(i)--)#define fe(i,b) for (auto &(x):b);#define itr(i,b) for(auto (i)=(b).begin();(i)!=(b).end();++(i))#define rti(i,b) for(auto (i)=(b).rbegin();(i)!=(b).rend();++(i))#define LL long long#define all(b) (b).begin(),(b).end()#define input_init stringstream ss; string strtoken, token; istringstream is#define input_line getline(cin, strtoken);is.str(strtoken);is.clear(istringstream::goodbit)#define input_token(num) ss.str(""); ss.clear(stringstream::goodbit); getline(is, token, ','); ss << token; ss >> num#define dir(xx,yy,x,y,i) (xx)=(x)+dir[(i)],(yy)=(y)+dir[(i)+1]typedef complex<double> P;typedef vector<P> Poly;const LL INF = 1 << 30;const double eps = 1e-8;const int dir[] = { 0, 1, 0, -1, 0 };int N, M,W,Q,X;int used[102];int flow[102][102];list<int> bfs(){queue<int> q;q.push(0);rT(i, 102)used[i] = -1;used[0] = 0;while (q.empty() == false){int v = q.front(); q.pop();rT(i, 102){if (used[i]==-1&&flow[v][i]>0){used[i] = v;q.push(i);}}}if (used[101] == -1)return list<int>();int x = 101;list<int> res;res.push_back(101);while (x != 0){x = used[x];res.push_front(x);}return res;}int main(void){cin >> W >> N;reE(i, 1, N){cin >> flow[0][i];}cin >> M;reE(i, 1, M){cin >> flow[i + 50][101];}reE(i, 1, 50){if (flow[0][i])reE(j, 51, 100)if (flow[j][101])flow[i][j] = 10000;}reE(i, 1, M){cin >> Q;rT(j, Q){cin >> X;flow[X][i + 50] = 0;}}int res = 0;while (res<W){list<int> path(bfs());if (path.empty())break;vector<int> p(all(path));int f = 10000;reT(i, 1u, p.size())f = min(f, flow[p[i - 1]][p[i]]);reT(i, 1u, p.size()){flow[p[i - 1]][p[i]] -= f;flow[p[i]][p[i - 1]] += f;}res += f;}if (res >= W)cout << "SHIROBAKO" << endl;else cout << "BANSAKUTSUKITA" << endl;return(0);}