제출 #1234481

#제출 시각아이디문제언어결과실행 시간메모리
1234481pcp기지국 (IOI20_stations)C++20
100 / 100
303 ms572 KiB
#include <vector>
#include <stack>
#include <iostream>
#include <algorithm>
using namespace std;

void dfs(vector<vector<int>> &connections, int node, int depth, int &count, vector<int> &cons){

	if (cons[node]!=-1)return;
	++depth;

	if (depth%2!=0){++count;cons[node]=count;}
	else cons[node]=-2;



	for (int it : connections[node]){
		dfs(connections,it,depth,count,cons);
	}

	if (depth%2==0){++count;cons[node]=count;}

}

std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
	std::vector<vector<int>> connections(n);



	for (int i = 0; i < n-1; i++) {
		connections[u[i]].push_back(v[i]);
		connections[v[i]].push_back(u[i]);
	}



	vector<int> cons(n,-1);



	int count = -1;
	dfs(connections,0,-1,count,cons);

	return cons;
}

int find_next_station(int s, int t, std::vector<int> c) {
	int csize=c.size();
	if (s<c[0]){

            
            int bf = s;
            
            for (int i = 0; i < csize-1;++i){
                if (t > bf && t<=c[i])return c[i];
                bf=c[i];
            
            }
            return c[csize-1];
    
	}else{
            reverse(c.begin(),c.end());
            int bf = s;
            
            for (int i = 0; i < csize-1;++i){
                if (t >=c[i] && t<bf)return c[i];
                bf=c[i];
            
            }
            return c[csize-1];
    
	}
	
	
}
#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...