Submission #31416520
Source Code Expand
#include <atcoder/string>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
using i32 = int32_t;
using u32 = uint32_t;
using i64 = int64_t;
using u64 = uint64_t;
#define rep(i,n) for(int i=0; i<(int)(n); i++)
void sort_tg_by(vector<vector<int>>& tg, vector<int>& by, int bound){
int sz = 0;
for(auto a : tg ) sz += a.size();
vector<vector<pair<int,int>>> bucket(bound);
rep(i,tg.size()) for(int v : tg[i]) bucket[by[v]].push_back(make_pair(i,v));
for(auto& a : tg) a.clear();
for(auto& b : bucket) for(auto [i,v] : b) tg[i].push_back(v);
}
vector<int> coord_compress_from_arr_by(vector<vector<int>>& tg, vector<int>& by, int bound){
int n = tg.size();
vector<int> sa_src;
vector<int> sa_recover;
rep(i,n){
sa_recover.push_back(i);
for(auto a : tg[i]){
sa_src.push_back(by[a] + 1);
sa_recover.push_back(-1);
}
sa_src.push_back(0);
}
auto sa = atcoder::suffix_array(sa_src, bound);
vector<int> sorted_tg_idx;
rep(i,sa.size()) if(sa_recover[sa[i]] != -1) sorted_tg_idx.push_back(sa_recover[sa[i]]);
vector<int> res(n);
for(int i=1; i<n; i++){
res[sorted_tg_idx[i]] = res[sorted_tg_idx[i-1]];
bool same = true;
if(tg[sorted_tg_idx[i-1]].size() != tg[sorted_tg_idx[i]].size()){
same = false;
}
else{
rep(j,tg[sorted_tg_idx[i]].size()){
if(by[tg[sorted_tg_idx[i-1]][j]] != by[tg[sorted_tg_idx[i]][j]]) same = false;
}
}
if(!same) res[sorted_tg_idx[i]]++;
}
return res;
}
int main(){
int N; cin >> N;
vector<vector<int>> E(N);
rep(i,N-1){
int u,v; cin >> u >> v; u--; v--;
E[u].push_back(v);
E[v].push_back(u);
}
vector<int> parent(N, -1);
vector<int> depth(N, -1);
vector<int> bfs = {0};
depth[0] = 0;
rep(i,N){
int p = bfs[i];
for(int e : E[p]) if(depth[e] == -1){
depth[e] = depth[p] + 1;
parent[e] = p;
bfs.push_back(e);
}
}
int max_depth = *max_element(depth.begin(), depth.end());
vector<vector<int>> from_depth(max_depth+2);
rep(i,N) from_depth[depth[i]].push_back(i);
vector<int> compressed(N, 0);
vector<vector<int>> children_ordered(N);
vector<vector<int>> Arr(N);
rep(p,N) for(int c : E[p]) if(depth[p] < depth[c]) children_ordered[p].push_back(c);
for(int d = max_depth; d >= 0; d--){
auto& vtxs = from_depth[d];
vector<vector<int>> children_ordered_part(vtxs.size());
rep(i,vtxs.size()) children_ordered_part[i] = move(children_ordered[vtxs[i]]);
sort_tg_by(children_ordered_part, compressed, from_depth[d+1].size());
auto compressed_part = coord_compress_from_arr_by(children_ordered_part, compressed, from_depth[d+1].size());
rep(i,vtxs.size()) children_ordered[vtxs[i]] = move(children_ordered_part[i]);
rep(i,vtxs.size()) compressed[vtxs[i]] = compressed_part[i];
}
vector<int> ans;
auto dfs = [&](auto self, int p) -> void {
ans.push_back(depth[p]);
for(int c : children_ordered[p]){
self(self, c);
ans.push_back(depth[p]);
}
};
dfs(dfs, 0);
rep(i,ans.size()){
if(i) cout << ' ';
cout << ans[i];
}
cout << '\n';
return 0;
}
struct ios_do_not_sync{
ios_do_not_sync(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
}
} ios_do_not_sync_instance;
Submission Info
| Submission Time | |
|---|---|
| Task | L - Lexicographic Euler Tour |
| User | Nachia |
| Language | C++ (GCC 9.2.1) |
| Score | 600 |
| Code Size | 3737 Byte |
| Status | AC |
| Exec Time | 389 ms |
| Memory | 60468 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_00.txt, sample_01.txt, sample_02.txt |
| All | case_00.txt, case_01.txt, case_02.txt, case_03.txt, case_04.txt, case_05.txt, case_06.txt, case_07.txt, case_08.txt, case_09.txt, case_10.txt, case_11.txt, case_12.txt, case_13.txt, case_14.txt, case_15.txt, case_16.txt, case_17.txt, case_18.txt, case_19.txt, case_20.txt, case_21.txt, case_22.txt, case_23.txt, case_24.txt, case_25.txt, case_26.txt, case_27.txt, case_28.txt, case_29.txt, case_30.txt, case_31.txt, case_32.txt, case_33.txt, case_34.txt, case_35.txt, case_36.txt, case_37.txt, case_38.txt, case_39.txt, case_40.txt, case_41.txt, case_42.txt, case_43.txt, case_44.txt, case_45.txt, case_46.txt, sample_00.txt, sample_01.txt, sample_02.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| case_00.txt | AC | 374 ms | 56032 KiB |
| case_01.txt | AC | 373 ms | 54960 KiB |
| case_02.txt | AC | 386 ms | 58712 KiB |
| case_03.txt | AC | 376 ms | 56520 KiB |
| case_04.txt | AC | 374 ms | 56744 KiB |
| case_05.txt | AC | 352 ms | 50088 KiB |
| case_06.txt | AC | 389 ms | 60468 KiB |
| case_07.txt | AC | 352 ms | 49588 KiB |
| case_08.txt | AC | 357 ms | 50536 KiB |
| case_09.txt | AC | 388 ms | 60236 KiB |
| case_10.txt | AC | 104 ms | 37836 KiB |
| case_11.txt | AC | 142 ms | 44592 KiB |
| case_12.txt | AC | 255 ms | 34428 KiB |
| case_13.txt | AC | 251 ms | 34264 KiB |
| case_14.txt | AC | 250 ms | 35208 KiB |
| case_15.txt | AC | 250 ms | 34456 KiB |
| case_16.txt | AC | 254 ms | 34596 KiB |
| case_17.txt | AC | 250 ms | 34428 KiB |
| case_18.txt | AC | 250 ms | 34896 KiB |
| case_19.txt | AC | 251 ms | 34584 KiB |
| case_20.txt | AC | 246 ms | 34808 KiB |
| case_21.txt | AC | 249 ms | 35200 KiB |
| case_22.txt | AC | 252 ms | 34500 KiB |
| case_23.txt | AC | 254 ms | 34480 KiB |
| case_24.txt | AC | 256 ms | 35116 KiB |
| case_25.txt | AC | 252 ms | 34056 KiB |
| case_26.txt | AC | 250 ms | 34472 KiB |
| case_27.txt | AC | 252 ms | 34344 KiB |
| case_28.txt | AC | 248 ms | 35120 KiB |
| case_29.txt | AC | 254 ms | 34512 KiB |
| case_30.txt | AC | 256 ms | 35312 KiB |
| case_31.txt | AC | 249 ms | 35248 KiB |
| case_32.txt | AC | 251 ms | 34488 KiB |
| case_33.txt | AC | 250 ms | 35280 KiB |
| case_34.txt | AC | 250 ms | 34420 KiB |
| case_35.txt | AC | 251 ms | 35240 KiB |
| case_36.txt | AC | 252 ms | 34836 KiB |
| case_37.txt | AC | 130 ms | 20852 KiB |
| case_38.txt | AC | 12 ms | 4188 KiB |
| case_39.txt | AC | 235 ms | 32816 KiB |
| case_40.txt | AC | 175 ms | 27064 KiB |
| case_41.txt | AC | 101 ms | 17872 KiB |
| case_42.txt | AC | 35 ms | 7420 KiB |
| case_43.txt | AC | 26 ms | 6164 KiB |
| case_44.txt | AC | 249 ms | 34192 KiB |
| case_45.txt | AC | 59 ms | 11436 KiB |
| case_46.txt | AC | 173 ms | 26884 KiB |
| sample_00.txt | AC | 5 ms | 3604 KiB |
| sample_01.txt | AC | 4 ms | 3540 KiB |
| sample_02.txt | AC | 4 ms | 3508 KiB |