Submission #1256041

#TimeUsernameProblemLanguageResultExecution timeMemory
1256041AvianshMigrations (IOI25_migrations)C++20
20 / 100
30 ms1480 KiB
#include "migrations.h"

#include <bits/stdc++.h>

using namespace std;

const int maxn = 10000;

int par[maxn];

int ret;
int mxdep;

void dfs(int st, vector<int>g[], int p, int dep){
    if(dep>mxdep){
        ret=st;
        mxdep=dep;
    }
    for(int i : g[st]){
        if(i==p)
            continue;
        dfs(i,g,st,dep+1);
    }
}

int a,b;

int send_message(int n, int i, int Pi) {
    par[i]=Pi;
    if(i==n-2){
        //must send a+b
        vector<int>g[n];
        for(int i = 1;i<n-1;i++){
            g[i].push_back(par[i]);
            g[par[i]].push_back(i);
        }
        mxdep=0;
        dfs(0,g,-1,0);
        a = ret;
        mxdep=0;
        dfs(a,g,-1,0);
        b=ret;
        if(a<b){
            swap(a,b);
        }
        return a+b;
    }
    if(i==n-1){
        //it is done.
        vector<int>g[n];
        for(int i = 1;i<n;i++){
            g[i].push_back(par[i]);
            g[par[i]].push_back(i);
        }
        int old = mxdep;
        mxdep=0;
        dfs(a,g,-1,0);
        int mxdepa = mxdep;
        int ca = ret;
        mxdep=0;
        dfs(b,g,-1,0);
        int mxdepb = mxdep;
        int cb = ret;
        if(max({mxdepa,mxdepb,old})==old){
            return a;
        }
        else if(mxdepa>old){
            return a+10000;
        }
        else{
            return b+10000;
        }
    }
    return 0;
}

pair<int, int> longest_path(vector<int> S) {
    int las2 = S[S.size()-2];
    int las1 = S[S.size()-1];
    if(las1>=10000){
        return {las1-10000,9999};
    }
    else{
        return {las2-las1,las1};
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...