提交时间:2025-06-02 14:15:02

运行 ID: 37923

#include<bits/stdc++.h> using namespace std; const int N=1e6+10,mod=1e9+7; int n,par[N],ans[N]; struct node{ int ch[2],fa; }t[N],t0[N]; #define fa(x) t[x].fa #define ch(x,id) t[x].ch[id] bool chk(int x){ return (x==ch(fa(x),1)); } void rotate(int x){ //cout<<x<<endl;for(int i=1;i<=n;i++) cout<<ch(i,0)<<' '<<ch(i,1)<<endl;cout<<endl; int f=fa(x),f2=fa(f); if(!f) return ; int id=chk(x); ch(f,id)=ch(x,id^1); fa(ch(x,id^1))=f; if(f2) ch(f2,chk(f))=x;fa(x)=f2; ch(x,id^1)=f;fa(f)=x; //for(int i=1;i<=n;i++) cout<<ch(i,0)<<' '<<ch(i,1)<<endl;cout<<endl; } void splay(int x){ for(;fa(x);rotate(x)){ if(fa(fa(x))){ if(chk(x)==chk(fa(x))) rotate(fa(x)); else rotate(x); } } } int dep[N]; void dfs(int u){ if(!u) return ; dep[u]=dep[fa(u)]+1; dfs(ch(u,0));dfs(ch(u,1)); } void Add(int &a,int b){a+=b;if(a>=mod) a-=mod;} int main(){ cin>>n; for(int i=1;i<=n;i++){ int a,b;cin>>a>>b; t0[i].ch[0]=a,t0[i].ch[1]=b; par[a]=i,par[b]=i; }for(int i=1;i<=n;i++){ t0[i].fa=par[i]; }for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) t[j]=t0[j]; splay(i);dfs(i); for(int j=1;j<=n;j++) Add(ans[j],dep[j]-1); }for(int i=1;i<=n;i++) cout<<ans[i]<<endl; return 0; }