QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#387835 | #667. Randomized Binary Search Tree | D_F_S | WA | 2ms | 10416kb | C++14 | 744b | 2024-04-12 21:37:07 | 2024-04-12 21:37:07 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
int n,a[N],fa[N],d[N]; ll an,b[N]; queue<int> q; multiset<ll> s[N];
int main()
{
scanf("%d%d",&n,&a[1]);
for(int i=2;i<=n;++i) scanf("%d%d",&fa[i],&a[i]), ++d[fa[i]];
for(int i=1;i<=n;++i) !d[i]&&(q.push(i),0); while(!q.empty())
{
int u=q.front(),f=fa[u]; q.pop(); !(--d[f])&&(q.push(f),0);
if(s[u].empty()) s[u].insert(0-b[u]);
else
{
s[u].insert(0-b[u]); s[u].insert(0-b[u]);
an+=b[u]+*--s[u].end(); s[u].erase(--s[u].end());
}
if(u==1) break; b[u]+=a[u]-a[fa[u]]+1;
s[u].size()>s[f].size()&&(swap(s[u],s[f]),swap(b[u],b[f]),0);
for(int v:s[u]) s[f].insert(v+b[u]-b[f]);
}
printf("%lld\n",an); return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 10416kb
input:
1
output:
0
result:
wrong answer 1st numbers differ - expected: '1.00000', found: '0.00000', error = '1.00000'