?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
187667842 |
Practice: DaiRuiChen007 |
1605D - 48 | C++14 (GCC 6-32) | Accepted | 202 ms | 10312 KB | 2023-01-03 03:56:59 | 2023-01-03 03:56:59 |
// LUOGU_RID: 98549891 #include<bits/stdc++.h> using namespace std; const int MAXN=2e5+1; vector <int> G[MAXN],ver[2]; int ans[MAXN]; bool vis[MAXN]; inline void dfs(int p,int f,int c) { ver[c].push_back(p); for(int v:G[p]) if(v!=f) dfs(v,p,c^1); } inline int bit(int x) { return 1<<x; } inline void solve() { int n; scanf("%d",&n); for(int i=1;i<=n;++i) ans[i]=0,vis[i]=false,G[i].clear(); for(int i=1;i<n;++i) { int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } ver[0].clear(),ver[1].clear(); dfs(1,0,0); int k=__lg(n); if(ver[0].size()>ver[1].size()) swap(ver[0],ver[1]); for(int i=k-1;i>=0;--i) { if((int)ver[0].size()<bit(i)) continue; for(int j=bit(i);j<bit(i+1);++j) { vis[j]=true; ans[ver[0].back()]=j; ver[0].pop_back(); } } for(int i=1;i<=n;++i) { if(!vis[i]) { ans[ver[1].back()]=i; ver[1].pop_back(); } } for(int i=1;i<=n;++i) printf("%d ",ans[i]); puts(""); } signed main() { int T; scanf("%d",&T); while(T--) solve(); return 0; }
?
?
?
?