QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#209157 | #6638. Treelection | c20230201 | WA | 146ms | 36584kb | C++14 | 1.1kb | 2023-10-10 10:53:28 | 2023-10-10 10:53:28 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int siz[maxn], f[maxn], mn[maxn];
vector<int> g[maxn];
void dfs(int x) {
siz[x]=1;
for(int y:g[x]) dfs(y), siz[x]+=siz[y];
return ;
}
int check(int x,int v) {
f[x]=0;
for(int y:g[x]) {
f[x]=f[x]+f[y]+1;
check(y,v);
}
f[x]=max(f[x]-v,0);
if(x==1) return !f[x];
return 0;
}
void dfs2(int x) {
for(int y:g[x]) {
mn[y]=min(mn[y],mn[x]);
dfs2(y);
}
return ;
}
void solve() {
int n; cin>>n;
for(int i=1;i<=n;i++) g[i].clear();
for(int i=2;i<=n;i++) {
int x; cin>>x;
g[x].push_back(i);
}
dfs(1);
int l=1, r=n, w=n+1;
while(l<=r) {
int mid=l+r>>1;
if(check(1,mid-1)) r=mid-1, w=mid;
else l=mid+1;
}
check(1,w-2);
for(int i=1;i<=n;i++) {
mn[i]=f[i];
if(i==1) mn[i]=(f[i]==1);
}
dfs2(1);
for(int i=1;i<=n;i++) {
if(siz[i]>w||mn[i]) cout<<1;
else cout<<0;
}
cout<<'\n';
return ;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T; cin>>T;
while(T--) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 4ms
memory: 31704kb
input:
2 4 1 2 3 5 1 1 2 2
output:
1100 10000
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 146ms
memory: 36584kb
input:
10 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 10...
output:
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
result:
wrong answer 1st lines differ - expected: '111111111111111111111111111111...0000000000000000000000000000000', found: '111111111111111111111111111111...0000000000000000000000000000000'