Submission #1174814

#TimeUsernameProblemLanguageResultExecution timeMemory
1174814khanhphucscratchStations (IOI20_stations)C++20
8 / 100
303 ms500 KiB
#include "stations.h"
#include<bits/stdc++.h>
using namespace std;
//Subtask 2
vector<int> ad[1005];
int ans[1005];
bool visited[1005];
void dfs(int u)
{
    visited[u] = 1;
    if(ad[u].size() > 0){
        ans[ad[u][0]] = ans[u]*2;
        dfs(ad[u][0]);
    }
    if(ad[u].size() > 1){
        ans[ad[u][1]] = ans[u]*2+1;
        dfs(ad[u][1]);
    }
}
vector<int> label(int n, int k, vector<int> a, vector<int> b)
{
    for(int i = 0; i < n; i++){
        ad[i].clear(); visited[i] = 0;
    }
    for(int i = 0; i < n-1; i++){
        if(a[i] > b[i]) swap(a[i], b[i]);
        ad[a[i]].push_back(b[i]);
    }
    ans[0] = 1; dfs(0);
    vector<int> an(n);
    for(int i = 0; i < n; i++) an[i] = ans[i];
    return an;
}
int lca(int u, int v)
{
    while(u != v){
        if(u < v) swap(u, v);
        u /= 2;
    }
    return u;
}
int find_next_station(int s, int t, vector<int> c)
{
    int r = lca(s, t);
    if(s == r){
        while(t/2 > s) t /= 2;
        return t;
    }
    else return s/2;
}
/*int main()
{
    int type; cin>>type;
    if(type == 1){
        vector<int> a, b;
        int n; cin>>n;
        for(int i = 0; i < n-1; i++){
            int u, v;
            cin>>u>>v;
            a.push_back(u);
            b.push_back(v);
        }
        vector<int> ans = label(n, 0, a, b);
        for(int i : ans) cout<<i<<" ";
    }
    else{
        int s, t, n;
        cin>>s>>t>>n;
        vector<int> adj(n);
        for(int i = 0; i < n; i++) cin>>adj[i];
        cout<<find_next_station(s, t, adj);
    }
}*/

#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...