結果
問題 | No.1984 [Cherry 4th Tune *] Dilemma |
ユーザー | 沙耶花 |
提出日時 | 2022-06-17 22:34:36 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 2,000 ms |
コード長 | 1,430 bytes |
コンパイル時間 | 5,219 ms |
コンパイル使用メモリ | 261,744 KB |
最終ジャッジ日時 | 2025-01-29 22:22:43 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 68 |
ソースコード
#include <stdio.h> #include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 long long I0 = 10000000000000; long long I1 = 1000000000000000000; int main(){ int N,M,K,P; cin>>N>>M>>K>>P; mf_graph<long long> G(N+M+K+2); int S = N+M+K; int T = N+M+K+1; vector<int> in(N),im(M),ik(K); rep(i,N){ int E; cin>>E; in[i] = G.add_edge(S,i,I0-E); G.add_edge(i,T,I0); } rep(i,M){ int F; cin>>F; G.add_edge(S,i+N,I0); im[i] = G.add_edge(i+N,T,I0-F); } rep(i,K){ int V; cin>>V; ik[i] = G.add_edge(S,i+N+M,I0+V); G.add_edge(i+N+M,T,I0); } rep(i,N){ int L; cin>>L; rep(j,L){ int A; cin>>A; A--; G.add_edge(A+N+M,i,I1); } } rep(i,P){ int I,J; cin>>I>>J; I--,J--; //G.add_edge(I,N+J,I1); G.add_edge(N+J,I,I1); } long long ans = G.flow(S,T); ans -= I0 * (N+M+K); ans *= -1; cout<<ans<<endl; vector<string> s; vector<int> ind; auto b = G.min_cut(S); rep(i,K){ if(b[N+M+i]==false){ s.push_back("Preparation"); ind.push_back(i+1); } } rep(i,N){ if(b[i]==false){ s.push_back("Goal"); ind.push_back(i+1); } } rep(i,M){ if(b[i+N]==true){ s.push_back("Action"); ind.push_back(i+1); } } cout<<s.size()<<endl; rep(i,s.size()){ cout<<s[i]<<' '<<ind[i]<<endl; } return 0; }