Saltar al contenido

ejemplo de código de código de leetcode de árbol binario de suma de ruta máxima

Ejemplo: cómo encontrar la suma de valores en la ruta en un árbol

#include#defineFOR(i, x, y)for(int i = x; i < y; i++)typedeflonglong ll;usingnamespace std;int n, m;

vector<int> graph[100001];int timer =1, tin[100001], tout[100001];int anc[100001][18];voiddfs(int node =1,int parent =0)
    anc[node][0]= parent;for(int i =1; i <18&& anc[node][i -1]; i++)
        anc[node][i]= anc[anc[node][i -1]][i -1];

    tin[node]= timer++;for(int i : graph[node])if(i != parent)dfs(i, node);
    tout[node]= timer;int bit[100001];voidupdate(int pos,int val)for(; pos <= n; pos +=(pos &(-pos))) bit[pos]+= val;intquery(int pos)int ans =0;for(; pos; pos -=(pos &(-pos))) ans += bit[pos];return ans;intfind_ancestor(int node)int lca = node;for(int i =17;~i; i--)if(anc[lca][i]&&query(tin[anc[lca][i]])==query(tin[node])) lca = anc[lca][i];return lca;intmain()
    ios_base::sync_with_stdio(0);
    cin.tie(0);freopen("disconnect.in","r",stdin);freopen("disconnect.out","w",stdout);
    cin >> n >> m;FOR(i,1, n)int a, b;
        cin >> a >> b;
        graph[a].push_back(b);
        graph[b].push_back(a);dfs();int v =0;while(m--)int t, x, y;
        cin >> t >> x >> y;int a = x ^ v, b = y ^ v;if(t ==1)if(anc[b][0]== a)swap(a, b);update(tin[a],1);update(tout[a],-1);elseif(find_ancestor(a)==find_ancestor(b))
                cout <<"YESn";
                v = a;else
                cout <<"NOn";
                v = b;return0;

Recuerda que te brindamos la opción de valorar este escrito si diste con el hallazgo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *