Submission #1366575

#TimeUsernameProblemLanguageResultExecution timeMemory
1366575SofiatpcThe Ties That Guide Us (CEOI23_incursion)C++20
9 / 100
115 ms5112 KiB
#include "incursion.h"
#include <bits/stdc++.h>

using namespace std;

#define sz(v) (int)v.size()
#define fi first
#define sc second
const int MAXN = 45005;
vector<int> adj[MAXN];
int dist[MAXN];

void dfs(int s, int p){
    for(int viz : adj[s])
        if(viz != p){
            dist[viz] = dist[s]+1;
            dfs(viz,s);
        }
}

vector<int> mark(vector<pair<int, int>> f, int safe) {
    int n = 0;
    for(int i = 0; i < sz(f); i++){
        adj[ f[i].fi ].push_back( f[i].sc );
        adj[ f[i].sc ].push_back( f[i].fi );
        n = max( {n, f[i].fi, f[i].sc });
    }

    dfs(safe,0);

    vector<int> ans(n);
    for(int i = 1; i <= n; i++){
        ans[i-1] = dist[i];

        adj[i].clear(); dist[i] = 0;
    }

    return ans;
}


void locate(vector<pair<int, int>> f, int ini, int t) {
    int n = 0;
    for(int i = 0; i < sz(f); i++){
        adj[ f[i].fi ].push_back( f[i].sc );
        adj[ f[i].sc ].push_back( f[i].fi );
        n = max( {n, f[i].fi, f[i].sc });
    }

    if(t == 0)return;
    dist[ini] = t;

    int cur = adj[ini][0];
    dist[cur] = visit(cur);

    if(dist[cur] != dist[ini]-1){
        visit(ini);

        cur = adj[ini][1];
        dist[cur] = visit(cur);

        if(dist[cur] != dist[ini]-1){
            visit(ini);
            cur = adj[ini][2];
            dist[cur] = visit(cur);
        }
    }

    int lst = ini;
    while(1){
        if(dist[cur] == 0)return;

        int nxt = -1;
        for(int viz : adj[cur])
            if(viz != lst){nxt = viz; break;}
        
        dist[ nxt ] = visit(nxt);

        if(dist[nxt] == dist[cur]-1){ lst = cur; cur = nxt; }
        else{
            visit(cur);

            int nxt2 = -1;
            for(int viz : adj[cur])
                if(viz != lst && viz != nxt){nxt2 = viz; break;}
            
            dist[nxt2] = visit(nxt2);
            lst = cur; cur = nxt2;
        }
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...