답안 #887605

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
887605 2023-12-14T20:11:42 Z Mher777 Paths (BOI18_paths) C++17
100 / 100
269 ms 122724 KB
/* ----------------------------- Mher777 ----------------------------- */
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <array>
#include <string>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <list>
#include <iterator>
#include <numeric>
#include <complex>
#include <utility>
#include <random>
#include <fstream>
#include <cassert>
using namespace std;

/* -------------------- Typedefs -------------------- */

typedef int itn;
typedef long long ll;
typedef unsigned long long ull;
typedef float fl;
typedef double db;
typedef long double ld;

/* -------------------- Usings -------------------- */

using vi = vector<int>;
using vll = vector<ll>;
using mii = map<int, int>;
using mll = map<ll, ll>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

/* -------------------- Defines -------------------- */

#define kap map
#define ff first
#define ss second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define mpr make_pair
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define all(x) (x).begin(), (x).end()

/* -------------------- Constants -------------------- */

const int MAX = int(1e9 + 5);
const ll MAXL = ll(1e18 + 5);
const ll MOD = ll(1e9 + 7);
const ll MOD2 = ll(998244353);
const ll CON = (ll)(911382323);
const ll MOD3 = (ll)(972663749);

/* -------------------- Functions -------------------- */

void fastio() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

void precision(int x) {
    cout.setf(ios::fixed | ios::showpoint);
    cout.precision(x);
}

ll gcd(ll a, ll b) {
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}

ll lcm(ll a, ll b) {
    return a / gcd(a, b) * b;
}

ll range_sum(ll a, ll b) {
    ll dif = a - 1, cnt = b - a + 1;
    ll ans = ((b - a + 1) * (b - a + 2)) / 2;
    ans += ((b - a + 1) * dif);
    return ans;
}

string dec_to_bin(ll a) {
    string s = "";
    for (ll i = a; i > 0; ) {
        ll k = i % 2;
        i /= 2;
        char c = k + 48;
        s += c;
    }
    if (a == 0) {
        s = "0";
    }
    reverse(all(s));
    return s;
}

ll bin_to_dec(string s) {
    ll num = 0;
    for (int i = 0; i < s.size(); i++) {
        num *= 2ll;
        num += (s[i] - '0');
    }
    return num;
}

int isPrime(ll a) {
    if (a == 1) return 0;
    for (ll i = 2; i * i <= a; i++) {
        if (a % i == 0) return 0;
    }
    return 1;
}

ll binpow(ll a, ll b) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
        }
        b >>= 1;
        a *= a;
    }
    return ans;
}

ll binpow_by_mod(ll a, ll b, ll mod) {
    if (!a) return 0;
    ll ans = 1;
    while (b) {
        if (b & 1) {
            ans *= a;
            ans %= mod;
        }
        b >>= 1;
        a *= a;
        a %= mod;
    }
    return ans;
}

/* -------------------- Solution -------------------- */

const int N = 1000005, M = (1 << 5) + 2;
vi g[N];
int a[N];
ll dp[N][M];

void slv() {
    int n, m, k;
    cin >> n >> m >> k;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        --a[i];
        dp[i][(1 << a[i])] = 1;
    }
    for (int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        g[x].pub(y);
        g[y].pub(x);
    }
    ll ans = 0;
    for (int mask = 1; mask < (1 << k); ++mask) {
        for (int i = 1; i <= n; ++i) {
            if (mask & (1 << a[i])) {
                for (auto to : g[i]) {
                    dp[i][mask] += dp[to][mask ^ (1 << a[i])];
                }
            }
            ans += dp[i][mask];
        }
    }
    cout << ans - n;
}

void cs() {
    int tstc = 1;
    //cin >> tstc;
    while (tstc--) {
        slv();
    }
}

void precalc() {
    return;
}

int main() {
    fastio();
    precalc();
    //precision(0);
    cs();
    return 0;
}

Compilation message

paths.cpp: In function 'll range_sum(ll, ll)':
paths.cpp:95:21: warning: unused variable 'cnt' [-Wunused-variable]
   95 |     ll dif = a - 1, cnt = b - a + 1;
      |                     ^~~
paths.cpp: In function 'll bin_to_dec(std::string)':
paths.cpp:118:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  118 |     for (int i = 0; i < s.size(); i++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 26972 KB Output is correct
2 Correct 6 ms 27060 KB Output is correct
3 Correct 6 ms 26972 KB Output is correct
4 Correct 6 ms 27064 KB Output is correct
5 Correct 6 ms 26972 KB Output is correct
6 Correct 6 ms 26928 KB Output is correct
7 Correct 6 ms 26968 KB Output is correct
8 Correct 6 ms 26972 KB Output is correct
9 Correct 6 ms 26972 KB Output is correct
10 Correct 6 ms 26968 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 35720 KB Output is correct
2 Correct 40 ms 35024 KB Output is correct
3 Correct 193 ms 122060 KB Output is correct
4 Correct 66 ms 43092 KB Output is correct
5 Correct 63 ms 43092 KB Output is correct
6 Correct 136 ms 91768 KB Output is correct
7 Correct 181 ms 122040 KB Output is correct
8 Correct 189 ms 122704 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 26972 KB Output is correct
2 Correct 6 ms 27060 KB Output is correct
3 Correct 6 ms 26972 KB Output is correct
4 Correct 6 ms 27064 KB Output is correct
5 Correct 6 ms 26972 KB Output is correct
6 Correct 6 ms 26928 KB Output is correct
7 Correct 6 ms 26968 KB Output is correct
8 Correct 6 ms 26972 KB Output is correct
9 Correct 6 ms 26972 KB Output is correct
10 Correct 6 ms 26968 KB Output is correct
11 Correct 48 ms 35720 KB Output is correct
12 Correct 40 ms 35024 KB Output is correct
13 Correct 193 ms 122060 KB Output is correct
14 Correct 66 ms 43092 KB Output is correct
15 Correct 63 ms 43092 KB Output is correct
16 Correct 136 ms 91768 KB Output is correct
17 Correct 181 ms 122040 KB Output is correct
18 Correct 189 ms 122704 KB Output is correct
19 Correct 51 ms 35672 KB Output is correct
20 Correct 40 ms 34932 KB Output is correct
21 Correct 182 ms 121928 KB Output is correct
22 Correct 67 ms 43164 KB Output is correct
23 Correct 63 ms 43032 KB Output is correct
24 Correct 146 ms 91776 KB Output is correct
25 Correct 190 ms 122144 KB Output is correct
26 Correct 232 ms 122724 KB Output is correct
27 Correct 42 ms 34896 KB Output is correct
28 Correct 58 ms 36512 KB Output is correct
29 Correct 255 ms 122052 KB Output is correct
30 Correct 165 ms 77920 KB Output is correct
31 Correct 178 ms 77996 KB Output is correct
32 Correct 269 ms 121940 KB Output is correct
33 Correct 6 ms 26972 KB Output is correct
34 Correct 7 ms 27060 KB Output is correct
35 Correct 6 ms 26972 KB Output is correct
36 Correct 7 ms 26844 KB Output is correct
37 Correct 6 ms 26968 KB Output is correct
38 Correct 6 ms 27316 KB Output is correct
39 Correct 6 ms 26972 KB Output is correct
40 Correct 6 ms 26972 KB Output is correct
41 Correct 6 ms 26984 KB Output is correct
42 Correct 6 ms 26972 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 26972 KB Output is correct
2 Correct 20 ms 29020 KB Output is correct
3 Correct 17 ms 28864 KB Output is correct
4 Correct 48 ms 57888 KB Output is correct
5 Correct 43 ms 58700 KB Output is correct
6 Correct 97 ms 57944 KB Output is correct
7 Correct 19 ms 29016 KB Output is correct
8 Correct 63 ms 57948 KB Output is correct
9 Correct 51 ms 58580 KB Output is correct
10 Correct 58 ms 58840 KB Output is correct
11 Correct 45 ms 44496 KB Output is correct
12 Correct 67 ms 51832 KB Output is correct
13 Correct 44 ms 44748 KB Output is correct
14 Correct 93 ms 57828 KB Output is correct
15 Correct 93 ms 58056 KB Output is correct
16 Correct 6 ms 26968 KB Output is correct
17 Correct 6 ms 27060 KB Output is correct
18 Correct 6 ms 27064 KB Output is correct
19 Correct 6 ms 26972 KB Output is correct
20 Correct 6 ms 26972 KB Output is correct
21 Correct 6 ms 26968 KB Output is correct
22 Correct 6 ms 26972 KB Output is correct
23 Correct 6 ms 26972 KB Output is correct
24 Correct 6 ms 26972 KB Output is correct
25 Correct 6 ms 26972 KB Output is correct