結果

問題 No.2733 Just K-times TSP
ユーザー ococonomy1
提出日時 2024-04-19 22:49:11
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 3,490 bytes
コンパイル時間 1,554 ms
コンパイル使用メモリ 127,664 KB
最終ジャッジ日時 2025-02-21 05:05:05
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 28 TLE * 3 -- * 1
権限があれば一括ダウンロードができます

ソースコード

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

//#pragma GCC target("avx2")
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <complex>
#include <climits>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <vector>
#include <unordered_map>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using pli = pair<ll,int>;
#define TEST cerr << "TEST" << endl
#define AMARI 998244353
//#define AMARI 1000000007
#define el '\n'
#define El '\n'
ll table[10][10];
struct hs{
size_t operator()(const pair<vector<int>,int> &p)const{
auto h2 = hash<int>{}(p.second);
for(int i = 0; i < p.first.size(); i++){
h2 ^= table[p.first[i]][i];
}
return h2;
}
};
int n,m,k;
unordered_map<pair<vector<int>,int>,ll,hs> mp;
vector<vector<int>> g;
ll saiki(vector<int> & a,int v){
/*
for(int i = 0; i < n; i++){
cerr << a[i] << ' ';
}
cerr << el;
*/
if(mp.find(pair(a,v)) != mp.end())return mp[pair(a,v)];
ll ans = 0;
for(int i = 0; i < g[v].size(); i++){
if(a[g[v][i]] >= k)continue;
a[g[v][i]]++;
ans += saiki(a,g[v][i]);
if(ans >= AMARI)ans -= AMARI;
a[g[v][i]]--;
}
/*
for(int i = 0; i < n; i++){
cerr << a[i] << ' ';
}
cerr << ans << el;
*/
return mp[pair(a,v)] = ans;
}
#define MULTI_TEST_CASE false
void solve(void){
//
//
//
//
//
//M <= 15
//K == 1 bitDP
// dp[i][j][S] = (i j 使 S )
//K^N bitDP (k+1) ver
cin >> n;
cin >> m >> k;
g.resize(n);
while(m--){
int u,v;
cin >> u >> v;
u--; v--;
g[u].push_back(v);
g[v].push_back(u);
}
vector<int> b(n,k);
for(int i = 0; i < n; i++){
mp[pair(b,i)] = 1;
}
vector<int> a(n,0);
ll ans = 0;
for(int i = 0; i < n; i++){
a[i]++;
ans += saiki(a,i);
a[i]--;
}
cout << ans % AMARI << el;
return;
}
// (XorShift)
unsigned long xor128(void) {
static unsigned long x = 123456789, y = 362436069, z = 521288629, w = 88675123;
unsigned long t = (x ^ (x << 11));
x = y;
y = z;
z = w;
return (w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)));
}
void calc(void){
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
table[i][j] = xor128();
}
}
return;
}
signed main(void){
cin.tie(nullptr);
ios::sync_with_stdio(false);
calc();
int t = 1;
if(MULTI_TEST_CASE)cin >> t;
while(t--){
solve();
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0