Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37915 | baka24 | 【BJ】T2 | C++ | 运行超时 | 28 | 2025 MS | 35924 KB | 1609 | 2025-06-02 13:54:31 |
#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=500010,N=30,inf=1e18,Mod=1e9+7; void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;if(x<0)x+=Mod;} int n,rt,ls[MAXN],rs[MAXN],fa[MAXN],FA[MAXN],LS[MAXN],RS[MAXN],dep[MAXN],as[MAXN]; void zig(int x){ if(ls[fa[x]]==x){ int p=fa[x],r=rs[x]; if(ls[fa[p]]==p)ls[fa[p]]=x; else rs[fa[p]]=x; fa[x]=fa[p]; fa[p]=x; fa[r]=p; ls[p]=r; rs[x]=p; } else{ int p=fa[x],l=ls[x]; if(ls[fa[p]]==p)ls[fa[p]]=x; else rs[fa[p]]=x; fa[x]=fa[p]; fa[p]=x; fa[l]=p; rs[p]=l; ls[x]=p; } } void splay(int x){ if(fa[x]==rt)zig(x); else if((ls[fa[x]]==x)^(ls[fa[fa[x]]]==fa[x]))zig(x),zig(x); else zig(fa[x]),zig(x); if(!fa[x])rt=x; } void dfs(int x){ dep[ls[x]]=dep[rs[x]]=dep[x]+1; if(ls[x])dfs(ls[x]); if(rs[x])dfs(rs[x]); } void slv(){ n=read(); for(int i=1;i<=n;i++)FA[LS[i]=read()]=i,FA[RS[i]=read()]=i; for(int o=1;o<=n;o++){ for(int i=1;i<=n;i++)fa[i]=FA[i],ls[i]=LS[i],rs[i]=RS[i];rt=1; while(o!=rt)splay(o); dep[rt]=0,dfs(rt); for(int i=1;i<=n;i++)add(as[i],dep[i]); } for(int i=1;i<=n;i++)printf("%lld\n",as[i]); } signed main(){ // freopen("dream.in","r",stdin);freopen("dream.out","w",stdout); slv(); return 0; }