QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#320358 | #8213. Graffiti | ucup-team2303# | RE | 3ms | 12476kb | C++17 | 3.3kb | 2024-02-03 16:05:23 | 2024-02-03 16:05:24 |
Judging History
answer
// #pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define PB emplace_back
#define int long long
#define ll long long
#define vi vector<int>
#define siz(a) ((int) ((a).size()))
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)
void print(vi n) { rep(i, 0, siz(n) - 1) cerr << n[i] << " \n"[i == siz(n) - 1]; }
const int N = 3e5;
int a, b[3], id, f[N + 5][3][3];
struct pii {
int x, y, z;
int &operator[](const int &o) {
if(o == 0) return x;
if(o == 1) return y;
return z;
}
} g[N + 5];
char c[4];
vi st[N + 5];
void dfs(int n, int fa) {
if(fa) st[n].erase(find(st[n].begin(), st[n].end(), fa));
for(int v : st[n]) dfs(v, n);
rep(x, 0, id) {
int siz = 0;
for(int v : st[n]) {
++siz;
rep(i, 0, id) g[siz][i] = f[v][i][x];
// g[siz][0] = f[v][0][x];
// g[siz][1] = f[v][1][x];
// g[siz][2] = f[v][2][x];
}
// cout << n << ' ' << siz << endl;
rep(y, 0, id) {
int p[3] = {0, 0, 0};
if(fa) {
p[b[0]] += x == b[1] && y == b[2];
p[b[2]] += x == b[1] && y == b[0];
}
if(x != b[1]) {
rep(i, 1, siz) f[n][x][y] += max({g[i][0] + p[0], g[i][1] + p[1], g[i][2] + p[2]});
continue;
}
int now = 0;
if(id == 2) {
rep(i, 1, siz) assert(g[i][0] == g[i][2]);
rep(i, 1, siz) now += g[i][0];
sort(g + 1, g + siz + 1, [&] (pii x, pii y) {
return x[1] - x[0] > y[1] - y[0];
});
rep(i, 0, siz) {
int j = siz - i;
rep(k, max(0ll, j / 2 - 2), min(j, j / 2 + 2)) // 0 : k, 1 : i, 2 : j - k
f[n][x][y] = max(f[n][x][y],
p[0] * k + p[1] * i + p[2] * (j - k)
+ k * (j - k)
+ now);
if(i < siz) now += g[i + 1][1] - g[i + 1][0];
}
}
else {
// cout << p[0] << ' ' << p[1] << ' ' << x << ' ' << y << endl;
// cout << "!@#!" << endl;
assert(!b[2]);
int now = 0;
rep(i, 1, siz) now += g[i][1];
sort(g + 1, g + siz + 1, [&] (pii x, pii y) {
return x[0] - x[1] > y[0] - y[1];
});
// cout << n << ' ' << now << endl;
rep(i, 0, siz) { // sum of 0
int j = siz - i;
f[n][x][y] = max(f[n][x][y],
p[0] * i + p[1] * j
+ ((b[0] == 0 && b[2] == 1) + (b[0] == 1 && b[2] == 0)) * i * j
+ (b[0] == 0 && b[2] == 0) * i * (i - 1)
+ (b[0] == 1 && b[2] == 1) * j * (j - 1)
+ now);
if(i < siz) now += g[i + 1][0] - g[i + 1][1];
}
// cout << now << endl;
}
}
}
if(n == 1) {
// cout << f[4][0][1] << endl;
cout << max({f[1][0][0], f[1][1][0], f[1][2][0]});
exit(0);
}
}
signed main() {
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> a >> c;
// cout << strlen(c);
if(strlen(c) == 1) return cout << a, 0;
if(strlen(c) == 2) return cout << (c[0] == c[1] ? 2 * (a - 1) : a - 1), 0;
rep(i, 1, 2) {
b[i] = ++id;
rep(j, 0, i - 1) if(c[i] == c[j]) {
--id;
b[i] = b[j];
}
}
int x, y;
rep(i, 1, a - 1) {
cin >> x >> y;
st[x].PB(y), st[y].PB(x);
}
dfs(1, 0);
return cerr << endl << 1.0 * clock() / CLOCKS_PER_SEC << endl, 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 12184kb
input:
1 a
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 0ms
memory: 12052kb
input:
3 orz 1 2 2 3
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: 0
Accepted
time: 3ms
memory: 11408kb
input:
2 ab 1 2
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 0ms
memory: 10820kb
input:
5 bob 3 2 5 1 1 4 2 4
output:
4
result:
ok 1 number(s): "4"
Test #5:
score: 0
Accepted
time: 0ms
memory: 12476kb
input:
50 abc 23 14 24 25 1 3 47 46 2 26 22 41 34 19 7 14 50 24 29 38 17 25 4 26 35 37 21 14 11 4 13 27 8 25 5 10 20 27 44 27 15 39 19 9 30 12 38 27 39 27 41 40 14 48 32 7 16 37 3 13 42 5 48 27 49 25 6 5 26 9 31 17 36 7 43 29 9 5 45 9 18 9 40 42 27 5 25 42 46 10 37 42 12 48 28 26 33 5
output:
37
result:
ok 1 number(s): "37"
Test #6:
score: 0
Accepted
time: 3ms
memory: 10800kb
input:
50 abc 14 26 46 47 10 13 30 19 33 46 32 50 39 6 35 13 8 5 28 3 2 21 17 22 22 6 5 20 19 3 38 3 16 2 18 34 13 6 47 6 9 28 1 2 37 47 50 10 12 34 40 19 42 19 26 46 43 3 44 47 31 47 49 18 45 34 27 13 7 34 6 34 3 45 11 44 21 13 29 24 15 40 48 39 24 6 41 47 23 27 36 21 25 21 4 20 20 44
output:
37
result:
ok 1 number(s): "37"
Test #7:
score: 0
Accepted
time: 3ms
memory: 10908kb
input:
50 abc 11 3 14 46 37 47 18 33 12 46 40 41 23 17 49 48 27 26 13 5 26 41 43 16 25 47 46 9 39 13 38 4 36 18 28 40 50 26 10 38 9 50 15 6 24 16 19 16 48 26 6 50 31 16 29 16 7 26 35 14 17 46 21 5 22 38 2 15 4 17 30 34 16 41 45 17 47 50 44 16 33 26 32 34 1 25 3 46 20 16 5 32 42 14 8 48 41 34
output:
44
result:
ok 1 number(s): "44"
Test #8:
score: 0
Accepted
time: 0ms
memory: 11940kb
input:
50 abc 9 7 43 49 26 3 14 11 17 43 23 35 19 25 44 25 2 1 10 28 4 46 21 22 15 43 39 25 16 38 38 23 34 29 47 49 46 35 5 39 25 35 32 23 27 37 3 32 37 24 20 13 33 25 1 29 30 11 31 34 18 31 50 37 13 48 22 23 8 10 41 24 42 46 36 37 48 43 49 31 40 41 12 35 24 34 45 7 35 31 7 31 11 44 28 1 6 19
output:
34
result:
ok 1 number(s): "34"
Test #9:
score: 0
Accepted
time: 0ms
memory: 11096kb
input:
50 abc 31 6 36 20 32 42 47 14 24 21 27 39 14 22 26 47 44 45 30 28 15 18 1 14 42 38 20 35 17 25 4 18 25 47 40 3 28 7 48 33 2 41 10 33 22 38 41 38 9 40 35 41 16 45 49 32 19 28 21 32 34 29 46 25 13 14 23 15 3 38 18 12 45 35 29 20 43 18 6 3 8 12 12 41 50 12 7 42 5 36 33 36 39 16 11 16 37 41
output:
30
result:
ok 1 number(s): "30"
Test #10:
score: 0
Accepted
time: 0ms
memory: 12364kb
input:
50 abc 50 18 10 32 38 18 47 13 31 6 49 18 45 47 42 4 7 18 18 27 36 13 12 13 41 12 35 8 6 40 16 8 4 22 14 44 25 2 28 18 3 27 34 32 5 27 43 5 33 11 23 24 2 18 21 39 46 5 8 49 32 19 20 28 22 12 11 5 15 38 44 7 9 5 19 49 1 16 30 50 48 25 40 11 24 27 26 5 37 50 17 24 13 5 39 26 29 27
output:
38
result:
ok 1 number(s): "38"
Test #11:
score: -100
Runtime Error
input:
51 abb 7 35 1 48 32 42 45 15 13 39 14 43 9 2 34 37 23 24 47 36 36 35 41 22 50 49 49 44 28 42 48 43 20 37 22 21 10 38 6 35 29 17 35 24 19 51 21 44 38 4 11 17 33 42 37 50 44 38 12 17 43 38 3 49 8 12 16 49 5 15 40 31 24 4 15 50 39 44 42 35 27 21 51 50 18 13 30 4 26 29 31 22 46 49 17 38 25 49 2 26