結果
問題 | No.2435 Order All Company |
ユーザー | 0214sh7 |
提出日時 | 2023-08-13 13:14:04 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,247 bytes |
コンパイル時間 | 2,211 ms |
コンパイル使用メモリ | 206,060 KB |
実行使用メモリ | 13,056 KB |
最終ジャッジ日時 | 2024-11-23 22:50:24 |
合計ジャッジ時間 | 4,188 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 6 WA * 30 |
ソースコード
#include <bits/stdc++.h> using namespace std; const long long MOD = 998244353; int main(void){ //cin.tie(nullptr); //ios::sync_with_stdio(false); long long N,K; cin >> N >> K; vector<vector<pair<long long,long long>>> E(K); for(int k=0;k<K;k++){ long long t; cin >> t; E[k].resize(t); for(int i=0;i<t;i++){ long long a,b; cin >> a >> b; a--;b--; if(a>b)swap(a,b); E[k][i] = {a,b}; } } //B[i][j] := k-iの橋をj社に発注できるようなk(<i)の数 long long B[1000][10]={}; for(int j=0;j<K;j++){ for(int i=0;i<(int)E[j].size();i++){ B[E[j][i].second][j]++; } } //dp[i][S] := 0番~i番までの街が連結になり、発注した建設会社の集合がSのときの発注の仕方の数 long long dp[1001][1024] = {}; dp[0][0] = 1; for(int i=0;i<N-1;i++){ for(int S=0;S<(1<<K);S++){ for(int j=0;j<K;j++){ dp[i+1][S|(1<<j)] += (B[i+1][j]*dp[i][S])%MOD; dp[i+1][S|(1<<j)] %= MOD; } } } long long Ans = dp[N-1][(1<<K)-1]; cout << Ans << endl; return 0; }