結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
![]() |
提出日時 | 2018-07-19 17:38:28 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,328 bytes |
コンパイル時間 | 1,734 ms |
コンパイル使用メモリ | 174,052 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-12-24 03:51:35 |
合計ジャッジ時間 | 2,539 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
ソースコード
#include <bits/stdc++.h>#define syosu(x) fixed<<setprecision(x)using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int,int> P;typedef pair<double,double> pdd;typedef pair<ll,ll> pll;typedef vector<int> vi;typedef vector<vi> vvi;typedef vector<double> vd;typedef vector<vd> vvd;typedef vector<ll> vl;typedef vector<vl> vvl;typedef vector<string> vs;typedef vector<P> vp;typedef vector<vp> vvp;typedef vector<pll> vpll;typedef pair<int,P> pip;typedef vector<pip> vip;const int inf=1<<30;const ll INF=1ll<<60;const double pi=acos(-1);const double eps=1e-8;const ull mod=1e9+7;const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};class Network{private:int V;struct edge{int to,cap,rev;};vector<vector<edge> > g;int DFS(int v,int t,int f,vi& iter,vi level){if(v==t) return f;for(int &i=iter[v];i<g[v].size();i++){edge &e=g[v][i];if(e.cap>0&&level[v]<level[e.to]){int d=DFS(e.to,t,min(f,e.cap),iter,level);if(d>0){e.cap-=d;g[e.to][e.rev].cap+=d;return d;}}}return 0;}void BFS(int s,vi& level){level=vi(V,-1);queue<int> que;level[s]=0;que.push(s);while(!que.empty()){int v=que.front();que.pop();for(int i=0;i<g[v].size();i++){edge &e=g[v][i];if(e.cap>0&&level[e.to]<0){level[e.to]=level[v]+1;que.push(e.to);}}}}public:Network(int v){V=v;g=vector<vector<edge> >(v);}void add_edge(int s,int t,int c){g[s].push_back(edge{t,c,(int)g[t].size()});g[t].push_back(edge{s,0,(int)g[s].size()-1});}int Dinic(int s,int t){int res=0;while(1){vi iter(V),level;BFS(s,level);if(level[t]<0) return res;int f;while((f=DFS(s,t,inf,iter,level))>0) res+=f;}}};int w,n,m;vi a,b;int main(){cin>>w>>n;a=vi(n);for(int i=0;i<n;i++) cin>>a[i];cin>>m;b=vi(m);for(int i=0;i<m;i++) cin>>b[i];Network nt(n+m+2);for(int i=0;i<n;i++) nt.add_edge(0,i+1,a[i]);for(int i=0;i<m;i++) nt.add_edge(n+i+1,n+m+1,b[i]);vvi c(n,vi(m,1));for(int i=0;i<m;i++){int N;cin>>N;for(int j=0;j<N;j++){int A;cin>>A;c[A-1][i]=0;}}for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(c[i][j]) nt.add_edge(i+1,n+j+1,inf);int x=nt.Dinic(0,n+m+1);cout<<(x>=w?"SHIROBAKO":"BANSAKUTSUKITA")<<endl;}