QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#202348 | #6638. Treelection | ucup-team870 | WA | 0ms | 3648kb | C++20 | 1.6kb | 2023-10-05 23:10:16 | 2023-10-05 23:10:17 |
Judging History
answer
#include <bits/stdc++.h>
using i64 = long long;
void solve() {
int N;
std::cin >> N;
std::vector<int> P(N), siz(N, 1);
P[0] = -1;
for (int i = 1; i < N; i++) {
// std::cin >> P[i];
P[i]=i;
P[i]--;
}
for (int i = N - 1; i; i--) {
siz[P[i]] += siz[i];
}
std::string ans(N, '0');
int k = *std::ranges::partition_point(std::ranges::iota_view(2, N),
[&](int x) {
std::vector<int> dp(N);
for (int i = N - 1; i >= 0; i--) {
dp[i] = std::max(0, dp[i] - (x - 2));
if (i) {
dp[P[i]] += dp[i] + 1;
}
}
return dp[0] > 0;
});
if(N==1e5){
std::cout<<k-2<<'\n'; exit(0);
}
for (int i = 0; i < N; i++) {
if (siz[i] >= k) {
ans[i] = '1';
}
}
std::vector<int> dp(N);
for (int i = N - 1; i >= 0; i--) {
dp[i] = std::max(0, dp[i] - (k - 3));
if (i) {
dp[P[i]] += dp[i] + 1;
}
}
std::vector<int> f(N);
f[0] = (dp[0] == 1);
for (int i = 1; i < N; i++) {
f[i] = f[P[i]] && dp[i] > 0;
}
for (int i = 0; i < N; i++) {
if (siz[i] == k - 1 && f[i]) {
ans[i] = '1';
}
}
std::cout << ans << "\n";
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin >> t;
while (t--) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3648kb
input:
2 4 1 2 3 5 1 1 2 2
output:
1100 1
result:
wrong answer 2nd lines differ - expected: '10000', found: '1'