結果
問題 | No.177 制作進行の宮森あおいです! |
ユーザー |
|
提出日時 | 2020-10-09 01:32:50 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,817 bytes |
コンパイル時間 | 1,415 ms |
コンパイル使用メモリ | 87,320 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-20 06:17:30 |
合計ジャッジ時間 | 1,825 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 13 |
コンパイルメッセージ
a.cpp:5:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
ソースコード
#line 1 "a.cpp"#include<iostream>using namespace std;#line 1 "/home/kotatsugame/library/graph/MF_Dinic.cpp"//Dinic O(EV^2)#include<algorithm>#include<utility>#include<vector>#include<queue>#include<limits>template<typename T>struct MF{struct edge{int to,rev;T cap;};vector<vector<edge> >G;vector<int>level,iter;MF(int n_=0):G(n_),level(n_),iter(n_){}void add_edge(int from,int to,T cap){G[from].push_back({to,(int)G[to].size(),cap});G[to].push_back({from,(int)G[from].size()-1,0});}T dfs(int u,int t,T f){if(u==t)return f;for(;iter[u]<G[u].size();iter[u]++){edge&e=G[u][iter[u]];if(e.cap>0&&level[u]<level[e.to]){T 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;}T max_flow(int s,int t){T ret=0;for(;;){fill(level.begin(),level.end(),-1);queue<int>P;level[s]=0;P.push(s);while(!P.empty()){int u=P.front();P.pop();for(edge&e:G[u]){if(e.cap>0&&level[e.to]<0){level[e.to]=level[u]+1;P.push(e.to);}}}if(level[t]<0)return ret;fill(iter.begin(),iter.end(),0);for(T f;(f=dfs(s,t,numeric_limits<T>::max()))>0;)ret+=f;}}};#line 4 "a.cpp"int W,N,J[50],M,C[50];main(){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];MF<int>P(N+M+2);int st=N+M;int go=N+M+1;for(int i=0;i<N;i++)P.add_edge(st,i,J[i]);for(int i=0;i<M;i++)P.add_edge(N+i,go,C[i]);for(int i=0;i<M;i++){int q;cin>>q;int x=0;while(q--){int y;cin>>y;y--;while(x<y){P.add_edge(x,N+i,W);x++;}x++;}while(x<N)P.add_edge(x++,N+i,W);}cout<<(P.max_flow(st,go)<W?"BANSAKUTSUKITA":"SHIROBAKO")<<endl;}