제출 #1035249

#제출 시각아이디문제언어결과실행 시간메모리
1035249Gray기지국 (IOI20_stations)C++17
0 / 100
637 ms688 KiB
#include "stations.h" #include <iostream> #include <vector> #define ll int #define ff first #define ss second #define ln "\n" #define pll pair<ll, ll> using namespace std; vector<vector<ll>> A; void dfs(ll u, ll p, vector<ll> &labels){ ll add=0; for (auto v:A[u]){ if (v==p) continue; labels[v]=(labels[u]<<1ll)+add; add++; dfs(v, u, labels); } } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { A.clear(); A.resize(n); for (ll i=0; i<n-1; i++){ A[u[i]].push_back(v[i]); A[v[i]].push_back(u[i]); } vector<int> labels(n); labels[0]=1; dfs(0, 0, labels); // for (ll i=0; i<n; i++){ // cout << labels[i] << ln; // } return labels; } int find_next_station(int s, int t, std::vector<int> c) { ll cnts=0, cntt=0; for (ll i=0; i<=10; i++){ if ((1ull<<i)&s){ cnts=i; } if ((1ull<<i)&t){ cntt=i; } } // cout << s << "->" << t << ":" << cnts << "&" <<cntt << ln; if (cnts>cntt){ return c[0]; }else{ if ((t&(s<<(cntt-cnts)))==(s<<(cntt-cnts))){ // cout << "Hap\n"; if ((t&(1ll<<(cntt-cnts-1)))){ return c[c.size()-1]; }else{ if (c.size()==3 or s==1)return c[c.size()-2]; else return c[c.size()-1]; } }else{ return c[0]; } } }
#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...