Submission #1192082

#TimeUsernameProblemLanguageResultExecution timeMemory
1192082alexddStations (IOI20_stations)C++20
5 / 100
304 ms516 KiB
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;

void check(bool bl)
{
    if(bl==0)
        while(1);
}

vector<int> con[1005];
int tin[1005];
int timer;
void dfs(int nod, int par)
{
    tin[nod] = timer;
    timer++;
    for(int adj:con[nod])
    {
        if(adj==par)
            continue;
        dfs(adj,nod);
    }
}
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v)
{
    for(int i=0;i<n;i++)
        con[i].clear();
    for(int i=0;i<n-1;i++)
    {
        con[u[i]].push_back(v[i]);
        con[v[i]].push_back(u[i]);
    }
    int root=0;
    for(int i=0;i<n;i++)
        if(con[i].size() < con[root].size())
            root = i;
    timer=0;
    dfs(root,-1);
    vector<int> sol(n);
    for(int i=0;i<n;i++)
        sol[i] = tin[i];
    return sol;
}
int find_next_station(int s, int t, std::vector<int> c)
{
    if((int)c.size() == 1)
        return c[0];

    for(int i=1;i<c.size();i++)
        check(c[i-1] <= c[i]);

    if(c[0] == s+1)///s e radacina
    {
        check(0);
        check(s==0);
        check(t > s);
        for(int i=1;i<c.size();i++)
            if(c[i] > t)
                return c[i-1];
        return c.back();
    }
    else
    {
        check(c[0] < s);
        check(c[1] == s+1);
        if(t < s)
            return c[0];
        assert(c[1] <= t);
        for(int i=2;i<c.size();i++)
            if(c[i] > t)
                return c[i-1];
        assert(c.back() <= t);
        return c.back();
    }
}
/*

1
7 6

0 2
2 1
1 3
0 4
4 5
5 6

6

0 3 2
0 1 2
0 2 2

0 6 4
0 5 4
0 4 4



*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...