QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#182488 | #4895. Lovely Dogs | hos_lyric# | 0 | 2ms | 4072kb | C++14 | 4.4kb | 2023-09-18 05:04:24 | 2024-07-04 02:01:39 |
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
int N, D;
vector<int> A, B;
vector<int> C;
vector<int> lpf;
vector<vector<pair<int, int>>> pess;
vector<int> fs;
vector<vector<int>> diviss;
vector<vector<int>> graph;
vector<Int> ans;
pair<vector<int>, map<int, int>> dfs(int u, int pa) {
pair<vector<int>, map<int, int>> ret;
{
const int c = C[u];
ret.first.push_back(c);
if (fs[c]) {
for (const int divi : diviss[c]) {
ret.second[divi] += fs[c];
}
}
// f(c^2)
bool ok = true;
for (const auto &pe : pess[c]) {
ok = ok && (2 * pe.second <= D);
}
if (ok) {
ans[u] += 1;
}
}
for (const int v : graph[u]) if (pa != v) {
auto res = dfs(v, u);
ans[u] += ans[v];
if (ret.second.size() < res.second.size()) {
swap(ret, res);
}
for (const int c : res.first) {
const auto &pes = pess[c];
const int len = pes.size();
vector<Int> prods(1 << len);
prods[0] = 1;
for (int i = 0; i < len; ++i) {
const int p = pes[i].first;
const int e = pes[i].second;
Int q = 1;
for (int f = 0; f < D + 1 - e; ++f) {
q *= p;
if (chmin<Int>(q, N + 1)) break;
}
for (int h = 0; h < 1 << i; ++h) {
prods[h | 1 << i] = min<Int>(prods[h] * q, N + 1);
}
}
int sum = 0;
for (int h = 0; h < 1 << len; ++h) if (prods[h] <= N) {
auto it = ret.second.find(prods[h]);
if (it != ret.second.end()) {
sum += (__builtin_parity(h)?-1:+1) * it->second;
}
}
ans[u] += sum * fs[c];
}
for (const int c : res.first) {
ret.first.push_back(c);
for (const int divi : diviss[c]) {
ret.second[divi] += fs[c];
}
}
}
return ret;
}
int main() {
for (; ~scanf("%d%d", &N, &D); ) {
A.resize(N - 1);
B.resize(N - 1);
for (int i = 0; i < N - 1; ++i) {
scanf("%d%d", &A[i], &B[i]);
--A[i];
--B[i];
}
C.resize(N);
for (int u = 0; u < N; ++u) {
scanf("%d", &C[u]);
}
lpf.assign(N + 1, 0);
for (int n = 2; n <= N; ++n) lpf[n] = n;
for (int p = 2; p <= N; ++p) if (lpf[p] == p) {
for (int n = 2 * p; n <= N; n += p) chmin(lpf[n], p);
}
pess.assign(N + 1, {});
fs.assign(N + 1, 0);
for (int n = 1; n <= N; ++n) {
fs[n] = 1;
for (int nn = n; nn > 1; ) {
const int p = lpf[nn];
int e = 0;
do {
++e;
nn /= p;
} while (nn % p == 0);
pess[n].emplace_back(p, e);
fs[n] *= ((e <= D) ? ((e&1)?-1:+1) : 0);
}
}
// cerr<<"fs = "<<fs<<endl;
diviss.assign(N + 1, {});
for (int d = 1; d <= N; ++d) {
for (int n = d; n <= N; n += d) {
diviss[n].push_back(d);
}
}
graph.assign(N, {});
for (int i = 0; i < N - 1; ++i) {
graph[A[i]].push_back(B[i]);
graph[B[i]].push_back(A[i]);
}
ans.assign(N, 0);
dfs(0, -1);
for (int u = 0; u < N; ++u) {
printf("%lld\n", ans[u]);
}
cerr<<"========"<<endl;
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Checker Judgement Failed
Test #1:
score: 10
Accepted
time: 0ms
memory: 4072kb
input:
20 2 18 8 18 11 13 19 10 8 9 11 4 8 9 15 9 17 2 1 13 18 20 18 1 8 12 17 7 16 5 11 16 15 6 19 14 16 1 3 2 15 5 13 20 6 16 18 9 19 17 7 14 10 11 3 1 12 4 8
output:
16 1 1 1 0 1 0 12 3 1 6 1 3 1 2 1 1 7 1 0
result:
ok 20 tokens
Test #2:
score: 0
Accepted
time: 1ms
memory: 3964kb
input:
500 1 287 459 335 297 303 82 427 202 500 158 257 45 410 274 208 19 172 113 274 379 380 65 234 46 161 441 73 488 473 327 474 481 152 67 78 414 260 20 142 385 494 343 446 72 498 296 111 9 349 372 448 217 282 442 412 144 342 44 282 92 337 128 426 201 104 493 278 298 278 145 363 121 92 305 278 379 166 1...
output:
158 -3 0 0 -1 0 0 0 -1 -1 -2 0 0 1 0 0 0 0 -1 -3 0 0 1 0 1 0 0 0 0 0 1 6 5 0 0 0 0 0 1 0 0 0 -1 2 0 0 0 98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 -11 0 0 1 0 0 0 -5 0 0 11 0 0 0 0 -1 0 0 1 0 7 -2 0 31 0 2 14 -3 0 1 0 0 0 0 1 0 0 -2 -3 0 0 -3 0 0 0 0 0 0 0 0 0 -1 0 0 -1 0 1 0 0 0 2 1 0 -3 0 0 0 -1 0 0 0 -...
result:
ok 500 tokens
Test #3:
score: 0
Accepted
time: 0ms
memory: 3952kb
input:
500 1 420 282 9 357 176 82 390 58 280 145 303 106 342 485 300 241 149 18 233 286 499 473 288 22 472 103 271 244 490 273 419 93 26 5 408 243 132 423 75 53 112 390 26 227 413 312 401 320 96 71 479 129 459 373 322 425 465 85 244 117 155 7 44 407 225 351 67 480 370 24 408 60 463 245 270 264 271 82 109 3...
output:
158 0 -1 0 6 0 0 0 0 1 0 0 -1 18 0 0 0 0 0 0 0 1 0 0 0 4 0 0 0 1 1 2 0 0 0 0 0 -3 0 0 0 0 0 0 -1 0 3 -1 0 -3 0 0 0 0 0 -1 -1 0 1 0 0 0 1 0 0 0 0 1 0 0 -1 0 7 0 1 230 2 0 0 -6 0 6 0 -2 -2 0 0 -8 0 0 -1 3 1 0 1 0 0 1 0 -3 1 0 0 0 0 -1 0 0 0 0 0 -2 0 -1 0 1 0 7 0 0 -1 0 0 0 0 0 1 0 0 -3 0 -1 0 0 0 0 0 ...
result:
ok 500 tokens
Test #4:
score: 0
Accepted
time: 1ms
memory: 3992kb
input:
500 1 407 7 167 9 444 291 345 93 446 169 305 310 231 378 93 158 93 128 233 75 499 106 93 430 403 132 26 186 305 452 15 238 82 93 146 93 272 11 62 319 301 91 136 28 93 60 478 324 101 248 180 445 253 155 61 456 348 130 137 308 93 63 376 93 202 446 93 401 458 9 226 93 164 93 432 484 265 93 396 218 473 ...
output:
158 -207 0 -12 20 0 0 0 49 0 -34 0 56 -59 -38 -119 0 0 0 103 -48 -46 -64 -11 0 -54 0 65 0 0 0 0 0 0 -41 -7 0 0 0 -54 0 39 0 -155 0 0 -49 0 0 -67 0 0 0 -54 -120 0 0 -55 0 0 -21 115 0 0 0 -206 0 0 -21 0 -48 -27 0 0 -71 0 151 0 2 -41 -58 0 0 0 0 0 -11 0 0 -49 -54 -38 49 -32 0 37 0 0 0 0 -42 0 0 -56 54 ...
result:
ok 500 tokens
Test #5:
score: 0
Accepted
time: 2ms
memory: 3908kb
input:
500 1 27 412 370 80 199 200 189 311 29 174 242 428 302 491 64 278 390 342 334 86 145 468 329 308 466 462 85 371 198 182 18 435 338 85 473 105 50 131 312 62 58 417 233 53 38 278 377 365 162 397 293 228 12 211 432 499 218 134 390 130 272 381 336 133 137 356 95 449 290 327 151 232 179 272 201 269 304 3...
output:
158 1 2 0 0 0 0 0 1 0 0 0 0 1 1 0 0 3 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 -8 0 0 0 0 0 0 0 -1 0 0 0 0 0 1 0 0 0 -1 0 0 0 0 -2 0 -2 -1 -3 0 0 0 2 0 -1 0 0 1 1 0 -1 -4 0 1 0 0 0 0 0 1 0 -3 0 0 0 0 0 0 -2 0 0 0 0 0 0 1 1 1 -1 0 0 0 0 0 -1 0 9 0 -67 0 0 0 0 0 0 -4 -2 0 0 0 0 -2 -1 -1 0 -2 0 0 -...
result:
ok 500 tokens
Test #6:
score: -10
Checker Judgement Failed
input:
500 2 428 7 101 379 176 90 188 28 455 459 196 332 481 438 294 234 222 285 2 448 58 491 132 449 111 413 254 163 9 201 269 393 79 11 182 331 277 265 88 370 233 188 329 294 446 445 136 131 317 453 311 219 437 486 496 310 85 349 421 326 316 490 499 367 404 361 446 411 249 494 462 58 433 60 57 278 45 456...
output:
result:
Subtask #2:
score: 0
Judgement Failed
Test #24:
score: 0
Judgement Failed
input:
2000 1 134 1468 867 1750 351 1220 1690 1888 1685 134 585 282 1142 643 206 271 260 1833 1987 770 1029 1667 322 1371 341 518 601 915 119 893 1933 1502 951 1785 1056 1630 1957 1208 96 55 1508 1212 331 427 505 151 1378 1486 1545 697 1459 629 202 997 180 1917 1638 1177 1244 1896 302 658 1433 1605 1318 19...
output:
result:
Subtask #3:
score: 0
Judgement Failed
Test #45:
score: 0
Judgement Failed
input:
200000 20 117994 12616 53490 106425 103660 50033 132640 78252 58384 19939 69183 10015 39098 165030 179856 130356 65245 57831 18234 83378 4240 154896 177149 102260 4634 180087 132390 19627 98506 60775 1890 120740 87908 21917 41323 192721 181885 96684 69412 139951 9800 38301 59025 29879 186185 81402 1...
output:
result:
Subtask #4:
score: 0
Judgement Failed
Test #50:
score: 0
Judgement Failed
input:
200000 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61...
output:
result:
Subtask #5:
score: 0
Judgement Failed
Test #55:
score: 0
Judgement Failed
input:
200000 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61...
output:
result:
Subtask #6:
score: 0
Judgement Failed
Test #78:
score: 0
Judgement Failed
input:
50000 1 8097 41839 17674 41774 40520 8024 5786 38261 20664 43471 1217 49276 11185 40807 14186 25584 31704 14814 42333 41475 13053 39565 45938 30104 5826 39463 5031 10814 43784 6042 58 33849 42978 18978 36307 33276 34769 4351 27884 37532 27528 29431 29451 39345 10946 9667 19016 47269 7911 30103 10308...
output:
result:
Subtask #7:
score: 0
Judgement Failed
Test #103:
score: 0
Judgement Failed
input:
200000 1 118863 188865 188022 168616 118976 119404 178852 33449 81624 40431 151228 160976 68943 136313 57200 117631 147789 139875 100240 55537 164811 145415 103548 186750 15010 168029 155731 107005 69836 1502 86171 122700 83448 131948 189162 94464 128210 2509 49724 183329 174782 192641 27687 71315 1...