Submission #361752

#TimeUsernameProblemLanguageResultExecution timeMemory
361752ryansee기지국 (IOI20_stations)C++14
0 / 100
5 ms1376 KiB
#include "stations.h" #include "bits/stdc++.h" using namespace std; #define FAST ios_base::sync_with_stdio(false); cin.tie(0); #define pb push_back #define eb emplace_back #define ins insert #define f first #define s second #define cbr cerr<<"hi\n" #define mmst(x, v) memset((x), v, sizeof ((x))) #define siz(x) ll(x.size()) #define all(x) (x).begin(), (x).end() #define lbd(x,y) (lower_bound(all(x),y)-x.begin()) #define ubd(x,y) (upper_bound(all(x),y)-x.begin()) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); inline long long rand(long long x, long long y) { return rng() % (y+1-x) + x; } //inclusive string inline to_string(char c) {string s(1,c);return s;} template<typename T> inline T gcd(T a,T b){ return a==0?llabs(b):gcd(b%a,a); } using ll=long long; using ld=long double; #define FOR(i,s,e) for(ll i=s;i<=ll(e);++i) #define DEC(i,s,e) for(ll i=s;i>=ll(e);--i) using pi=pair<ll,ll>; using spi=pair<ll,pi>; using dpi=pair<pi,pi>; long long LLINF = 1e18; int INF = 1e9+1e6; #define MAXN (200006) vector<int> label(int n, int k, vector<int> U, vector<int> V) { vector<vector<int>> v(n, vector<int>()); FOR(i,0,n-2) v[U[i]].eb(V[i]), v[V[i]].eb(U[i]); vector<int> C(n, 0); ll bruh = 0; ll co=0, even=2000, odd = 2001; function<void(int,int)>dfs=[&](int x,int p){ int c = 0; for(auto i:v[x]) if(i^p) ++ c; if(bruh) { C[x] = bruh == 1 ? even : odd; if(bruh == 1) even += 2; else odd += 2; for(auto i:v[x]) if(i^p) dfs(i, x); } else if(c == 1) { C[x] = co ++; for(auto i:v[x]) if(i^p) dfs(i, x); } else { C[x] = co ++; for(auto i:v[x]) if(i^p) { ++ bruh; dfs(i, x); } } }; FOR(i,0,n-1) if(siz(v[i]) == 1) { dfs(i, i); break; } return C; } int find_next_station(int s, int t, vector<int> c) { if(s > t) { return *min_element(all(c)); } else { if(s < 2000 && siz(c) == 2) return *max_element(all(c)); if(s >= 2000 && t >= 2000 && (s&1) != (t&1)) { return *min_element(all(c)); } if(s >= 2000 && t >= 2000 && (s&1) == (t&1)) { return *max_element(all(c)); } assert(s < 2000 && siz(c) == 3); for(auto i:c) if(i >= 2000 && (i&1) == (t&1)) { return i; } 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...