Submission #1095305

#TimeUsernameProblemLanguageResultExecution timeMemory
1095305andrewpPaths (BOI18_paths)C++14
70 / 100
244 ms45976 KiB
//Dedicated to my love, ivaziva #pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; #define int long long using pii = pair<int, int>; using ll = int64_t; #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define dbg(x) cerr<<#x<<": "<<x<<'\n'; #define dbga(A,l_,r_){for(int i_=l_;i_<=r_;i_++)cerr<<A[i_]<<' ';cerr<<'\n';} #define dbgv(a_){for(auto x_:a_) cerr<<x_<<' ';cerr<<'\n';} const int N = 3e5 + 20; int n, m, k, a[N], ans; vector<int> g[N]; int32_t main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cerr.tie(nullptr); cin >> n >> m >> k; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } ans = 0; if (k >= 2) { for (int i = 1; i <= n; i++) { for (int u : g[i]) { if (a[u] != a[i]) { ans++; } } } } if (k >= 3) { for (int i = 1; i <= n; i++) { vector<int> cnt(k + 1, 0); for (int u : g[i]) { cnt[a[u]]++; } for (int x = 1; x <= k; x++) { for (int y = 1; y <= k; y++) { if (x != y && x != a[i] && y != a[i]) { ans += cnt[x] * cnt[y]; } } } } } dbg(ans); if (k >= 4) { vector<vector<int>> cnt(n + 1, vector<int>(k + 1, 0)); for (int i = 1; i <= n; i++) { for (int u : g[i]) { cnt[i][a[u]]++; } } for (int i = 1; i <= n; i++) { for (int u : g[i]) { int uk = 0; for (int x = 1; x <= k; x++) { for (int y = 1; y <= k; y++) { if (x != y && a[i] != a[u] && x != a[i] && x != a[u] && y != a[i] && y != a[u]) { ans += cnt[i][x] * cnt[u][y]; } } } } } } dbg(ans); if (k >= 5) { vector<vector<int>> cnt(n + 1, vector<int>(k + 1, 0)); int f[n + 1][k + 1][k + 1]; for (int x = 1; x <= n; x++) { for (int y = 1; y <= k; y++) { for (int z = 1; z <= k; z++) { f[x][y][z] = 0; } } } for (int i = 1; i <= n; i++) { for (int u : g[i]) { cnt[i][a[u]]++; } } for (int i = 1; i <= n; i++) { for (int u : g[i]) { for (int j = 1; j <= k; j++) { f[i][a[u]][j] += cnt[u][j]; } } } for (int i = 1; i <= n; i++) { for (int p = 1; p <= k; p++) { for (int q = 1; q <= k; q++) { for (int r = 1; r <= k; r++) { for (int s = 1; s <= k; s++) { if (p != q && p != r && p != s && q != r && q != s && r != s && a[i] != p && a[i] != q && a[i] != r && a[i] != s) { ans += f[i][p][q] * f[i][r][s]; ans += f[i][p][r] * f[i][q][s]; ans += f[i][p][s] * f[i][q][r]; } } } } } } } cout << ans << '\n'; return 0; }

Compilation message (stderr)

paths.cpp: In function 'int32_t main()':
paths.cpp:69:21: warning: unused variable 'uk' [-Wunused-variable]
   69 |                 int uk = 0;
      |                     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...