結果

問題 No.177 制作進行の宮森あおいです!
ユーザー IL_msta
提出日時 2015-08-20 23:46:17
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 12 ms / 2,000 ms
コード長 2,158 bytes
コンパイル時間 748 ms
コンパイル使用メモリ 90,852 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-07-18 11:01:18
合計ジャッジ時間 1,276 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘void add_edge(int, int, int)’:
main.cpp:38:34: warning: narrowing conversion of ‘V[y].std::vector<edge>::size()’ from ‘std::vector<edge>::size_type’ {aka ‘long unsigned int’} to ‘int’ [-Wnarrowing]
   38 |         edge t = {y,cap,V[y].size() };
      |                         ~~~~~~~~~^~
main.cpp:40:34: warning: narrowing conversion of ‘(V[x].std::vector<edge>::size() - 1)’ from ‘std::vector<edge>::size_type’ {aka ‘long unsigned int’} to ‘int’ [-Wnarrowing]
   40 |         edge u = {x,0,V[x].size()-1 };
      |                       ~~~~~~~~~~~^~

ソースコード

diff #
プレゼンテーションモードにする

#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <cmath>
#include <string>
//#include <array>
#include <list>
#include <queue>
#include <vector>
#include <complex>
#include <set>
#include <map>
/////////
#define REP(i, x, n) for(int i = x; i < n; i++)
#define rep(i,n) REP(i,0,n)
#define P(p) cout<<(p)<<endl;
#define PII pair<int,int>
/////////
typedef long long LL;
typedef long double LD;
/////////
using namespace::std;
/////////
struct edge{int to,cap,rev;};
const int Finf = (int)1e7;
const int Emax = 3000;
vector<edge> V[Emax];
bool use[Emax];
void add_edge(int x,int y,int cap){
edge t = {y,cap,V[y].size() };
V[x].push_back( t );
edge u = {x,0,V[x].size()-1 };
V[y].push_back( u );
}
int dfs(int from,int to,int cf){
int tf;
if( from == to ) return cf;
use[from] = true;
for(unsigned int i=0; i<V[from].size(); ++i){
edge& e = V[from][i];
if( use[e.to] == false &&
e.cap > 0 &&
( tf = dfs(e.to,to,min(cf,e.cap)))>0){
e.cap -= tf;
V[e.to][e.rev].cap += tf;
return tf;
}
}
return 0;
}
int maxflow(int from,int to){
int fl = 0;
int tf;
for(;;){
//memset(use,0,sizeof(use) );
rep(i,Emax){
use[i] = false;
}
tf = dfs(from,to,Finf);
if( tf == 0 )return fl;
fl += tf;
}
}
int main(void){
std::cin.tie(0);
std::ios::sync_with_stdio(false);
std::cout << std::fixed;//
//cout << setprecision(16);//
int W,N;
cin>>W>>N;
rep(i,Emax){
V[i].clear();
}
int sor = 0;
int tin = 1;
int J[50];
rep(i,N){
cin>>J[i];
add_edge( sor,i+2,J[i] );
}
int M;
cin>>M;
int C[50];
rep(i,M){
cin>>C[i];
add_edge( 2+N+i,tin,C[i] );
}
bool line[50][50];
rep(i,50)rep(j,50)line[i][j]=true;
int Q,X;
rep(i,M){
cin>>Q;
rep(j,Q){
cin>> X;
--X;
//X->i
//line[2+N+i][X+2] = false;
//line[X+2][2+N+i] = false;
line[X][i] = false;
}
rep(j,N){//j->i
//if(line[j+2][2+N+i] == true ){
if(line[j][i] == true ){
add_edge( j+2,2+N+i,Finf );
}
}
}
int ans;
ans = maxflow(sor,tin);
if( ans >= W){
cout << "SHIROBAKO\n";
}else{
cout << "BANSAKUTSUKITA\n";
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0