제출 #927006

#제출 시각아이디문제언어결과실행 시간메모리
927006vjudge1Paths (BOI18_paths)C++17
23 / 100
3032 ms53072 KiB
#include<bits/stdc++.h> using namespace std; const int N = (int)3e5+3; const int MOD = (int)1e6+3; const int B1 = 450; const int B2 = 450; int n, m, k, a[N], kol[6]; vector<int> g[N]; bool used[6]; long long ans; void dfs(int v) { used[a[v]] = 1; ans++; for(auto to : g[v]) { if(!used[a[to]]) { dfs(to); } } used[a[v]] = 0; } int cnt[N][32]; int main() { ios_base::sync_with_stdio(NULL); cin.tie(0); 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; if(a[u] == a[v]) { continue; } ans += 2; g[u].push_back(v); g[v].push_back(u); } for(int i = 1; i <= n; ++i) { int cur = 0; memset(kol, 0, sizeof(kol)); for(auto x : g[i]) { ans += 2*(cur-kol[a[x]]); cur++; kol[a[x]]++; } } for(int i = 1; i <= n; ++i) { for(int mask = 0; mask < (1 << k); ++mask) { for(int j : g[i]) { if(!(mask >> a[j] & 1)) { continue; } cnt[i][mask]++; } } } for(int i = 1; i <= n; ++i) { int can = (1 << k)-1; can ^= (1 << a[i]); for(int j : g[i]) { can ^= (1 << a[j]); for(int k : g[i]) { if(!(can >> a[k] & 1)) { continue; } can ^= (1 << a[k]); ans += cnt[j][can]; can ^= (1 << a[k]); } can ^= (1 << a[j]); } } cout << ans; return 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...