cplib

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub NEET-6z/cplib

:warning: src/tree/eulertour.hpp

Depends on

Code

#include "../template.hpp"

pair<vector<int>,vector<int>> ET(vector<vector<int>> G,int root=0){
    vector<int> in(si(G)),out(si(G));
    int now=0;
    auto dfs=[&](auto dfs,int v,int p) -> void {
        in[v]=now++;
        for(int e: G[v])
            if(e!=p) dfs(dfs,e,v);
        out[v]=now++;
    };
    dfs(dfs,root,-1);
    return make_pair(in,out);
}

pair<vector<int>,vector<int>> vtetv(vector<pair<int,int>> es,int root=0){
    int N=si(es)+1;
    vector<vector<pair<int,int>>> G(N);
    rep(i,N-1) G[es[i].fi].emplace_back(es[i].se,i),G[es[i].se].emplace_back(es[i].fi,i);
    vector<int> etv(N-1);
    vector<int> vte(N);
    auto dfs=[&](auto dfs,int v,int p) -> void {
        for(auto [e,id]: G[v]){
            if(e==p) continue;
            dfs(dfs,e,v);
            vte[e]=id;
            etv[id]=e;
        }
    };
    dfs(dfs,root,-1);
    return make_pair(vte,etv);
}
#line 2 "src/template.hpp"
#include <bits/stdc++.h>
using namespace std;
#define si(a) (long)a.size()
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define rep(i,n) for(int i=0;i<(int)(n);++i)
template<typename S,typename F> bool chmin(S&a,F b){return b<a?(a=b,1):0;}
template<typename S,typename F> bool chmax(S&a,F b){return b>a?(a=b,1):0;}
bool _=(ios::sync_with_stdio(0),cin.tie(0),cout<<fixed<<setprecision(16),0);
#line 2 "src/tree/eulertour.hpp"

pair<vector<int>,vector<int>> ET(vector<vector<int>> G,int root=0){
    vector<int> in(si(G)),out(si(G));
    int now=0;
    auto dfs=[&](auto dfs,int v,int p) -> void {
        in[v]=now++;
        for(int e: G[v])
            if(e!=p) dfs(dfs,e,v);
        out[v]=now++;
    };
    dfs(dfs,root,-1);
    return make_pair(in,out);
}

pair<vector<int>,vector<int>> vtetv(vector<pair<int,int>> es,int root=0){
    int N=si(es)+1;
    vector<vector<pair<int,int>>> G(N);
    rep(i,N-1) G[es[i].fi].emplace_back(es[i].se,i),G[es[i].se].emplace_back(es[i].fi,i);
    vector<int> etv(N-1);
    vector<int> vte(N);
    auto dfs=[&](auto dfs,int v,int p) -> void {
        for(auto [e,id]: G[v]){
            if(e==p) continue;
            dfs(dfs,e,v);
            vte[e]=id;
            etv[id]=e;
        }
    };
    dfs(dfs,root,-1);
    return make_pair(vte,etv);
}
Back to top page