Submission #669820

# Submission time Handle Problem Language Result Execution time Memory
669820 2022-12-07T11:01:20 Z ghostwriter Paths (BOI18_paths) C++17
100 / 100
324 ms 97176 KB
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include <debug.h>
#else
#define debug(...)
#endif
#define ft front
#define bk back
#define st first
#define nd second
#define ins insert
#define ers erase
#define pb push_back
#define pf push_front
#define _pb pop_back
#define _pf pop_front
#define lb lower_bound
#define ub upper_bound
#define mtp make_tuple
#define bg begin
#define ed end
#define all(x) (x).bg(), (x).ed()
#define sz(x) (int)(x).size()
typedef long long ll; typedef unsigned long long ull;
typedef double db; typedef long double ldb;
typedef pair<int, int> pi; typedef pair<ll, ll> pll;
typedef vector<int> vi; typedef vector<ll> vll; typedef vector<pi> vpi; typedef vector<pll> vpll;
typedef string str;
#define FOR(i, l, r) for (int i = (l); i <= (r); ++i)
#define FOS(i, r, l) for (int i = (r); i >= (l); --i)
#define FRN(i, n) for (int i = 0; i < (n); ++i)
#define FSN(i, n) for (int i = (n) - 1; i >= 0; --i)
#define EACH(i, x) for (auto &i : (x))
#define WHILE while
template<typename T> T gcd(T a, T b) { WHILE(b) { a = a % b; swap(a, b); } return a; }
template<typename T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
#define file "TEST"
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
ll rand(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rd); }
/*
----------------------------------------------------------------
    END OF TEMPLATE
----------------------------------------------------------------
    Tran The Bao - ghostwriter
    Training for VOI23 gold medal
----------------------------------------------------------------
    GOAT
----------------------------------------------------------------
*/
const int N = 3e5 + 5;
int n, m, k, c[N];
ll d[N][1 << 5], rs = 0;
vi adj[N];
void input() {
	cin >> n >> m >> k;
	FOR(i, 1, n) {
		cin >> c[i];
		--c[i];
	}
	FOR(i, 1, m) {
		int u, v;
		cin >> u >> v;
		adj[u].pb(v);
		adj[v].pb(u);
	}
}
void solve() {
	FSN(j, 1 << k)
	FOR(i, 1, n) {
		if (!(j & (1 << c[i]))) continue;
		EACH(z, adj[i])
			if (!(j & (1 << c[z])))
				d[i][j] += d[z][j | (1 << c[z])] + 1;
	}
	FOR(i, 1, n) rs += d[i][1 << c[i]];
	cout << rs;
}
signed main() {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    // freopen(file".inp", "r", stdin);
    // freopen(file".out", "w", stdout);
    input();
    solve();
    return 0;
}
/*
----------------------------------------------------------------
From Benq:
    stuff you should look for
        * int overflow, array bounds
        * special cases (n=1?)
        * do smth instead of nothing and stay organized
        * WRITE STUFF DOWN
        * DON'T GET STUCK ON ONE APPROACH
----------------------------------------------------------------
*/
# Verdict Execution time Memory Grader output
1 Correct 4 ms 7284 KB Output is correct
2 Correct 5 ms 7360 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7380 KB Output is correct
5 Correct 4 ms 7380 KB Output is correct
6 Correct 4 ms 7380 KB Output is correct
7 Correct 4 ms 7380 KB Output is correct
8 Correct 4 ms 7380 KB Output is correct
9 Correct 4 ms 7380 KB Output is correct
10 Correct 3 ms 7380 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 69 ms 12236 KB Output is correct
2 Correct 51 ms 11084 KB Output is correct
3 Correct 255 ms 96148 KB Output is correct
4 Correct 88 ms 22688 KB Output is correct
5 Correct 85 ms 15244 KB Output is correct
6 Correct 207 ms 69400 KB Output is correct
7 Correct 255 ms 96524 KB Output is correct
8 Correct 253 ms 97176 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 7284 KB Output is correct
2 Correct 5 ms 7360 KB Output is correct
3 Correct 4 ms 7380 KB Output is correct
4 Correct 4 ms 7380 KB Output is correct
5 Correct 4 ms 7380 KB Output is correct
6 Correct 4 ms 7380 KB Output is correct
7 Correct 4 ms 7380 KB Output is correct
8 Correct 4 ms 7380 KB Output is correct
9 Correct 4 ms 7380 KB Output is correct
10 Correct 3 ms 7380 KB Output is correct
11 Correct 69 ms 12236 KB Output is correct
12 Correct 51 ms 11084 KB Output is correct
13 Correct 255 ms 96148 KB Output is correct
14 Correct 88 ms 22688 KB Output is correct
15 Correct 85 ms 15244 KB Output is correct
16 Correct 207 ms 69400 KB Output is correct
17 Correct 255 ms 96524 KB Output is correct
18 Correct 253 ms 97176 KB Output is correct
19 Correct 71 ms 15052 KB Output is correct
20 Correct 55 ms 13336 KB Output is correct
21 Correct 256 ms 96520 KB Output is correct
22 Correct 87 ms 22792 KB Output is correct
23 Correct 79 ms 15212 KB Output is correct
24 Correct 181 ms 69512 KB Output is correct
25 Correct 261 ms 96428 KB Output is correct
26 Correct 295 ms 97176 KB Output is correct
27 Correct 63 ms 13400 KB Output is correct
28 Correct 87 ms 16576 KB Output is correct
29 Correct 315 ms 96408 KB Output is correct
30 Correct 219 ms 55464 KB Output is correct
31 Correct 204 ms 55348 KB Output is correct
32 Correct 324 ms 96412 KB Output is correct
33 Correct 4 ms 7384 KB Output is correct
34 Correct 3 ms 7380 KB Output is correct
35 Correct 4 ms 7380 KB Output is correct
36 Correct 4 ms 7384 KB Output is correct
37 Correct 4 ms 7380 KB Output is correct
38 Correct 4 ms 7384 KB Output is correct
39 Correct 3 ms 7380 KB Output is correct
40 Correct 4 ms 7380 KB Output is correct
41 Correct 4 ms 7380 KB Output is correct
42 Correct 4 ms 7312 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 7380 KB Output is correct
2 Correct 31 ms 8512 KB Output is correct
3 Correct 24 ms 8532 KB Output is correct
4 Correct 72 ms 35596 KB Output is correct
5 Correct 56 ms 36308 KB Output is correct
6 Correct 129 ms 35508 KB Output is correct
7 Correct 23 ms 8532 KB Output is correct
8 Correct 93 ms 35496 KB Output is correct
9 Correct 63 ms 36244 KB Output is correct
10 Correct 70 ms 36112 KB Output is correct
11 Correct 77 ms 21904 KB Output is correct
12 Correct 88 ms 29388 KB Output is correct
13 Correct 72 ms 21968 KB Output is correct
14 Correct 123 ms 35624 KB Output is correct
15 Correct 144 ms 35700 KB Output is correct
16 Correct 3 ms 7380 KB Output is correct
17 Correct 5 ms 7292 KB Output is correct
18 Correct 3 ms 7380 KB Output is correct
19 Correct 4 ms 7468 KB Output is correct
20 Correct 4 ms 7380 KB Output is correct
21 Correct 4 ms 7380 KB Output is correct
22 Correct 4 ms 7380 KB Output is correct
23 Correct 6 ms 7380 KB Output is correct
24 Correct 4 ms 7380 KB Output is correct
25 Correct 4 ms 7380 KB Output is correct