제출 #1024412

#제출 시각아이디문제언어결과실행 시간메모리
1024412Ahmed_Solyman기지국 (IOI20_stations)C++14
0 / 100
576 ms940 KiB
#include <bits/stdc++.h>
 
using namespace std;
typedef long long ll;
 
vector<vector<int>>adj;
vector<int>l,r,p,ret;
int mark=0;
void dfs(int node,int par,int dep){
    if(dep)ret[node]=mark++;
    for(auto i:adj[node])
        if(i!=par)dfs(i,node,1-dep);
    if(!dep)ret[node]=mark++;
}
vector<int> label(int n, int k, vector<int> u, vector<int> v){
    mark=0;
    l=r=p=ret=vector<int>(n);
    adj=vector<vector<int>>(n);
    for(int i=0;i<n-1;i++){
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    dfs(0,0,1);
    return ret;
}
int find_next_station(int s, int t,vector<int> c){
    int m=(int)c.size();
    for(int i=0;i<m;i++){
        if(c[i]==t)return t;
    }
    if(s==0){
        for(int i=m-1;i>=0;i--){
            int in=(i==0?s+1:c[i-1]+1);
            int out=c[i];
            if(t>in && t<out){
                return c[i];
            }
        }
    }
    if(s<c[0]){///given is the in[s]
        int p=c[m-1];
        for(int i=m-2;i>=0;i--){
            int in=(i==0?s+1:c[i-1]+1);
            int out=c[i];
            if(t>in && t<out){
                return c[i];
            }
        }
        return p;
    }
    else{///given is the out[s]
        int p=c[0];
        for(int i=1;i<m;i++){
            int in=c[i];
            int out=(i==m-1?s-1:c[i+1]-1);
            if(t>in && t<out){
                return c[i];
            }
        }
        return p;
    }
}
#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...