답안 #1089582

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1089582 2024-09-16T18:09:35 Z Tymond Paths (BOI18_paths) C++17
100 / 100
241 ms 162128 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
#define fi first
#define se second
#define vi vector<int>
#define vll vector<long long>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rng64(chrono::steady_clock::now().time_since_epoch().count());
inline int rand(int l,int r){return uniform_int_distribution<int>(l, r)(rng);}
inline ll rand(ll l,ll r){return uniform_int_distribution<ll>(l, r)(rng64);}
#ifdef DEBUG
auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";}
auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";}
#define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X)
#else
#define debug(...){}
#endif

struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};

const int MAXN = 3e5 + 7;
const int MAXK = (1 << 5) + 7;
ll dp[MAXN][MAXK];
int in[MAXN][MAXK];
vi g[MAXN];
int a[MAXN];
int n, m, k;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> n >> m >> k;
    for(int i =1; i <= n; i++){
        cin >> a[i];
        a[i]--;
    }

    for(int i = 1; i <= m; i++){
        int u, v;
        cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }

    queue<pii> q;
    for(int i = 1; i <= n; i++){
        q.push({i, (1 << a[i])});
        dp[i][(1 << a[i])] = 1LL;
        in[i][(1 << a[i])] = 1;
    }

    int v, msk;
    while(sz(q)){
        v = q.front().fi;
        msk = q.front().se;
        q.pop();

        for(auto u : g[v]){
            if((1 << a[u]) & msk){
                continue;
            }
            dp[u][msk | (1 << a[u])] += dp[v][msk];
            if(!in[u][msk | (1 << a[u])]){
                in[u][msk | (1 << a[u])] = 1;
                q.push({u, (msk | (1 << a[u]))});
            }
        }
    }

    ll ans = -n;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j < (1 << k); j++){
            ans = (ll)ans + dp[i][j];
        }
    }

    cout << ans << '\n';

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 7512 KB Output is correct
2 Correct 3 ms 7516 KB Output is correct
3 Correct 3 ms 7516 KB Output is correct
4 Correct 3 ms 7512 KB Output is correct
5 Correct 3 ms 7516 KB Output is correct
6 Correct 3 ms 7516 KB Output is correct
7 Correct 3 ms 7516 KB Output is correct
8 Correct 3 ms 7516 KB Output is correct
9 Correct 3 ms 7516 KB Output is correct
10 Correct 4 ms 7516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 54 ms 16308 KB Output is correct
2 Correct 38 ms 13656 KB Output is correct
3 Correct 228 ms 161320 KB Output is correct
4 Correct 66 ms 29524 KB Output is correct
5 Correct 59 ms 29248 KB Output is correct
6 Correct 168 ms 113788 KB Output is correct
7 Correct 226 ms 161364 KB Output is correct
8 Correct 224 ms 162128 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 7512 KB Output is correct
2 Correct 3 ms 7516 KB Output is correct
3 Correct 3 ms 7516 KB Output is correct
4 Correct 3 ms 7512 KB Output is correct
5 Correct 3 ms 7516 KB Output is correct
6 Correct 3 ms 7516 KB Output is correct
7 Correct 3 ms 7516 KB Output is correct
8 Correct 3 ms 7516 KB Output is correct
9 Correct 3 ms 7516 KB Output is correct
10 Correct 4 ms 7516 KB Output is correct
11 Correct 54 ms 16308 KB Output is correct
12 Correct 38 ms 13656 KB Output is correct
13 Correct 228 ms 161320 KB Output is correct
14 Correct 66 ms 29524 KB Output is correct
15 Correct 59 ms 29248 KB Output is correct
16 Correct 168 ms 113788 KB Output is correct
17 Correct 226 ms 161364 KB Output is correct
18 Correct 224 ms 162128 KB Output is correct
19 Correct 55 ms 16208 KB Output is correct
20 Correct 47 ms 13744 KB Output is correct
21 Correct 223 ms 161428 KB Output is correct
22 Correct 67 ms 29524 KB Output is correct
23 Correct 61 ms 29260 KB Output is correct
24 Correct 152 ms 113864 KB Output is correct
25 Correct 215 ms 161364 KB Output is correct
26 Correct 207 ms 162128 KB Output is correct
27 Correct 48 ms 13652 KB Output is correct
28 Correct 65 ms 18768 KB Output is correct
29 Correct 241 ms 161668 KB Output is correct
30 Correct 185 ms 90648 KB Output is correct
31 Correct 184 ms 89992 KB Output is correct
32 Correct 241 ms 161876 KB Output is correct
33 Correct 3 ms 7512 KB Output is correct
34 Correct 3 ms 7516 KB Output is correct
35 Correct 3 ms 7512 KB Output is correct
36 Correct 3 ms 7516 KB Output is correct
37 Correct 3 ms 7516 KB Output is correct
38 Correct 4 ms 7516 KB Output is correct
39 Correct 4 ms 7516 KB Output is correct
40 Correct 3 ms 7516 KB Output is correct
41 Correct 3 ms 7776 KB Output is correct
42 Correct 3 ms 7516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 7516 KB Output is correct
2 Correct 25 ms 9612 KB Output is correct
3 Correct 15 ms 9564 KB Output is correct
4 Correct 68 ms 58704 KB Output is correct
5 Correct 56 ms 59512 KB Output is correct
6 Correct 88 ms 58964 KB Output is correct
7 Correct 20 ms 9560 KB Output is correct
8 Correct 85 ms 58708 KB Output is correct
9 Correct 61 ms 60356 KB Output is correct
10 Correct 70 ms 60104 KB Output is correct
11 Correct 60 ms 35280 KB Output is correct
12 Correct 56 ms 47692 KB Output is correct
13 Correct 57 ms 34852 KB Output is correct
14 Correct 86 ms 58964 KB Output is correct
15 Correct 79 ms 58960 KB Output is correct
16 Correct 3 ms 7512 KB Output is correct
17 Correct 3 ms 7384 KB Output is correct
18 Correct 4 ms 7512 KB Output is correct
19 Correct 3 ms 7516 KB Output is correct
20 Correct 3 ms 7516 KB Output is correct
21 Correct 3 ms 7516 KB Output is correct
22 Correct 3 ms 7512 KB Output is correct
23 Correct 3 ms 7516 KB Output is correct
24 Correct 3 ms 7516 KB Output is correct
25 Correct 3 ms 7536 KB Output is correct