QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#768081 | #2766. Unique Cities | _8_8_ | 0 | 919ms | 131912kb | C++20 | 3.2kb | 2024-11-21 00:20:48 | 2024-11-21 00:20:48 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = (1 << 20) + 12, MOD = (int)1e9 + 7;
int n, m, a[N], vis[N], timer, p[N];
vector<int> g[N], gt[N];
bool is[N];
map<int, int> dist[N];
int f(int d) {
timer++;
vis[d] = timer;
int lst = d;
queue<int> q;
q.push(d);
dist[d][d] = 0;
while(!q.empty()) {
int v = q.front();
lst = v;
q.pop();
for(int to : g[v]) {
if(vis[to] != timer) {
dist[d][to] = dist[d][v] + 1;
q.push(to);
vis[to] = timer;
}
}
}
return lst;
}
int col[N], dep[N], mxd[N], res[N], d, d1, o, cr;
int zap = 0;
bool ok[N];
void dfs(int v, int pr = -1) {
mxd[v] = dep[v];
for(int to:g[v]) if(to != pr) {
gt[v].push_back(to);
dep[to] = dep[v] + 1;
dfs(to, v);
mxd[v] = max(mxd[v], mxd[to]);
}
for(int i = 0; i < (int)gt[v].size(); i++) {
if(mxd[gt[v][i]] == mxd[v]) {
swap(gt[v][0], gt[v][i]);
}
}
}
vector<int> st;
void go(int v) {
if(dist[cr][v] > dist[o][v] || (dist[cr][v] == dist[o][v] && zap)) {
set<int> raz;
for(int i = 0; i < (int)st.size() && mxd[v] - dep[v] < dep[v] - dep[st[i]]; i++) {
// cerr << st[i] << '\n';
raz.insert(a[st[i]]);
break;
}
res[v] += (int)raz.size();
}
if(gt[v].empty()) return;
int sz = (int)gt[v].size();
vector<int> p(sz), s(sz);
p[0] = mxd[gt[v][0]];
s[sz - 1] = mxd[gt[v][sz - 1]];
for(int i = 1; i < sz; i++) {
p[i] = max(p[i - 1], mxd[gt[v][i]]);
}
for(int i = sz - 2; i >= 0; i--) {
s[i] = max(s[i + 1], mxd[gt[v][i]]);
}
vector<int> del;
for(int i = 0; i < sz; i++) {
int to = gt[v][i];
int mx = dep[v];
if(i) mx = max(mx, p[i - 1]);
if(i < sz - 1) mx = max(mx, s[i + 1]);
mx -= dep[v];
if(i == 1) st.pop_back();
if(i <= 1) {
while(!st.empty() && dep[v] - dep[st.back()] <= mx) {
del.push_back(st.back());
st.pop_back();
}
}
if(i <= 1) st.push_back(v);
go(to);
}
st.pop_back();
reverse(del.begin(), del.end());
for(int j:del) {
st.push_back(j);
}
del.clear();
}
void solve(int root) {
for(int i = 1; i <= n; i++) {
gt[i].clear();
}
st.clear();
dep[root] = 1;
dfs(root);
go(root);
}
void test() {
cin >> n >> m;
for(int i = 1; i <= n - 1; i++) {
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
d = f(1), d1 = f(d);
f(d1);
o = d1;cr = d;
solve(d);
zap = 1;
o = d;cr = d1;
solve(d1);
for(int i = 1; i <= n; i++) {
cout << res[i] << '\n';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
while(t--)
test();
}
詳細信息
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 4
Accepted
time: 8ms
memory: 63012kb
input:
2 1 1 2 1 1
output:
1 1
result:
ok 2 lines
Test #2:
score: 0
Wrong Answer
time: 17ms
memory: 61416kb
input:
1842 848 740 1093 1299 922 801 1560 265 1664 1043 65 1430 427 80 233 4 1238 1623 1473 1569 274 953 1485 1259 649 1671 1409 246 542 742 1517 720 1120 1527 1328 1167 1531 1056 1130 673 1222 192 980 1393 913 446 688 135 23 1065 1787 978 1481 1765 1720 310 202 1406 1451 475 523 104 774 1531 829 169 396 ...
output:
1 1 1 0 0 0 1 0 1 0 1 1 0 1 0 0 0 1 0 0 1 1 0 1 1 0 0 1 1 1 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 ...
result:
wrong answer 7th lines differ - expected: '2', found: '1'
Subtask #2:
score: 0
Time Limit Exceeded
Test #33:
score: 32
Accepted
time: 610ms
memory: 89420kb
input:
115391 1 32067 50006 1710 5850 21016 66364 72998 34367 24783 10670 49950 93666 81835 81234 53480 68963 87357 43320 93905 30509 72528 92224 520 100511 54804 2917 58490 23858 93643 87530 90737 65205 60740 110812 9553 90266 70028 67222 108045 88982 35584 110286 53518 21733 108735 26404 108228 109796 92...
output:
1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
ok 115391 lines
Test #34:
score: 32
Accepted
time: 632ms
memory: 131912kb
input:
114976 1 74053 36053 62978 89255 32367 21913 113882 44280 60815 35782 107811 95272 109039 78845 22484 41688 1781 111596 111506 59375 19869 45586 84990 81214 38638 90205 14928 14370 10758 5465 87745 5949 66720 6357 76134 26466 91805 105936 31792 68220 74216 108462 60158 67410 69489 50297 74956 63776 ...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
ok 114976 lines
Test #35:
score: 32
Accepted
time: 106ms
memory: 72872kb
input:
28388 1 10509 15648 25863 14495 26973 2553 22819 7801 5054 15080 6091 12384 4727 3538 14600 14672 4481 9533 26520 23761 6729 3525 15678 8426 7628 26890 25846 26267 10186 5633 21692 25057 17882 26693 25518 13361 6875 371 27786 23632 24474 21637 1387 8015 22050 3422 8420 25752 26814 7209 11499 21112 5...
output:
1 1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 ...
result:
ok 28388 lines
Test #36:
score: 0
Time Limit Exceeded
input:
200000 1 17564 189544 118109 130056 39153 56739 138814 48828 103560 16598 174399 8469 146229 189678 173046 95721 168793 168656 21067 78280 169301 178753 63496 153947 22754 181712 34926 22205 41248 16310 81136 35768 87905 3442 89999 119217 108408 136055 153855 175444 177272 157293 174568 5857 71023 5...
output:
result:
Subtask #3:
score: 0
Wrong Answer
Test #50:
score: 0
Wrong Answer
time: 919ms
memory: 100524kb
input:
157976 157976 20171 157173 44732 54119 107845 121149 109200 110309 82678 108206 89140 64200 36916 128759 3966 123760 92978 105716 43700 146126 14924 3429 107721 36095 94906 78173 97162 29552 119574 39605 25145 138492 16622 99431 60281 7949 76176 136644 75716 91518 127987 110605 77999 110960 101187 5...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
wrong answer 2nd lines differ - expected: '5', found: '1'
Subtask #4:
score: 0
Skipped
Dependency #1:
0%