Submission #968709

#TimeUsernameProblemLanguageResultExecution timeMemory
968709raphaelpPaths (BOI18_paths)C++14
100 / 100
499 ms41600 KiB
#include <bits/stdc++.h> using namespace std; int main() { long long N, M, K; cin >> N >> M >> K; vector<long long> C(N); for (long long i = 0; i < N; i++) { cin >> C[i]; C[i]--; } vector<vector<long long>> AR(N); vector<vector<long long>> voisins(N, vector<long long>(K)); for (long long i = 0; i < M; i++) { long long a, b; cin >> a >> b; a--, b--; AR[a].push_back(b); AR[b].push_back(a); voisins[a][C[b]]++; voisins[b][C[a]]++; } long long tot = 0, half = 0; for (long long i = 0; i < N; i++) { vector<long long> count((1 << K)); for (long long j = 0; j < AR[i].size(); j++) { count[(1 << C[AR[i][j]])]++; for (long long k = 0; k < K; k++) { if (k == C[AR[i][j]]) continue; count[((1 << C[AR[i][j]]) | (1 << k))] += voisins[AR[i][j]][k]; } } for (long long j = 1; j < (1 << K); j++) { if (j & (1 << C[i])) continue; if (__builtin_popcount(j) > 2) continue; if (__builtin_popcount(j) == 1 && K >= 2) half += count[j]; if (__builtin_popcount(j) == 1 && K >= 3) { for (long long k = 0; k < K; k++) { if ((j & (1 << k)) || k == C[i]) continue; half += count[(1 << k)] * count[j]; } } if (__builtin_popcount(j) == 2 && K >= 4) { for (long long k = 0; k < K; k++) { if ((j & (1 << k)) || k == C[i]) continue; half += count[(1 << k)] * count[j]; } } if (__builtin_popcount(j) == 2 && K >= 5) { half += count[j] * count[((1 << K) - 1 - j - (1 << C[i]))]; } } } cout << tot * 2 + half; }

Compilation message (stderr)

paths.cpp: In function 'int main()':
paths.cpp:29:33: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   29 |         for (long long j = 0; j < AR[i].size(); j++)
      |                               ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...