Task: | Distances |
Sender: | cubefreak777 |
Submission time: | 2021-01-31 14:57:57 +0200 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 29 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 29 |
#2 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.03 s | 1, 2 | details |
#2 | TIME LIMIT EXCEEDED | -- | 2 | details |
Code
#include<bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>#include <ext/pb_ds/tree_policy.hpp>using namespace __gnu_pbds;using namespace std;// #pragma GCC optimize("Ofast")// #pragma GCC target("avx,avx2,fma")// #pragma GCC optimization ("unroll-loops")typedef long long ll ;typedef pair<int,int> pii;typedef pair<ll,ll> pll;#define CS custom_hash#define vt vector#define loop(i,a,b) for(ll i=a ;i<b;i++)#define For(i,n) for(int i=0;i<(ll)n;i++)#define Rev(i,n) for(int i=n-1;i>=0;i--)#define Rep(i,n) for(int i=1;i<=n;++i)#define F first#define S second#define pb push_back#define em emplace_back#define all(v) (v).begin(),(v).end()#define mems(x, y) memset(x, y, sizeof(x))#define sz(x) (int)(x).size()#define mp(a,b) make_pair(a,b)#define po(n) cout << n <<"\n "#define ar array#define endl "\n"#define PI acos(-1)#define umap unordered_map#define gmap gp_hash_table#define ld long double#define SA(n) __builtin_popcountll(n)#define LB lower_bound#define UB upper_bound// debugger credits: https://codeforces.com/blog/entry/68809void __print(int x) {cerr << x;}void __print(long x) {cerr << x;}void __print(long long x) {cerr << x;}void __print(unsigned x) {cerr << x;}void __print(unsigned long x) {cerr << x;}void __print(unsigned long long x) {cerr << x;}void __print(float x) {cerr << x;}void __print(double x) {cerr << x;}void __print(long double x) {cerr << x;}void __print(char x) {cerr << '\'' << x << '\'';}void __print(const char *x) {cerr << '\"' << x << '\"';}void __print(const string &x) {cerr << '\"' << x << '\"';}void __print(bool x) {cerr << (x ? "true" : "false");}template<typename T, typename V>void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}template<typename T>void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}void _print() {cerr << "]\n";}template <typename T, typename... V>void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}template <typename T, typename V>void mdebug(map<T,vt<V>>m){for(auto x:m){cerr << x.F << " : [ " ;for(auto c:x.S)cerr << c << " ";cerr << "]"<<endl ;}}#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)//#ifndef ONLINE_JUDGE//#ifndef LOCAL#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)//#else//#define debug(x...)//#endif//#pragma GCC optimize "trapv"template<class T> using oset =tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update> ;//template credits :William Lin(tmwilliamlin168)#define F_OR(i, a, b, s) for (int i = (a); ((s) > 0 ? i < (b) : i > (b)); i += (s))#define F_OR1(e) F_OR(i, 0, e, 1)#define F_OR2(i, e) F_OR(i, 0, e, 1)#define F_OR3(i, b, e) F_OR(i, b, e, 1)#define F_OR4(i, b, e, s) F_OR(i, b, e, s)#define GET5(a, b, c, d, e, ...) e#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)#define FOR(...) F_ORC(__VA_ARGS__)(__VA_ARGS__)#define EACH(x, a) for (auto& x: a)template<class T> bool umin(T& a, const T& b) {return b<a?a=b, 1:0;}template<class T> bool umax(T& a, const T& b) {return a<b?a=b, 1:0;}template<class A> void read(vt<A>& v);template<class A, size_t S> void read(ar<A, S>& a);template<class T> void read(T& x) {cin >> x;}void read(double& d) {string t;read(t);d=stod(t);}void read(long double& d) {string t;read(t);d=stold(t);}template<class H, class... T> void read(H& h, T&... t) {read(h);read(t...);}template<class A> void read(vt<A>& x) {EACH(a, x)read(a);}template<class A, size_t S> void read(array<A, S>& x) {EACH(a, x)read(a);}string to_string(char c) {return string(1, c);}string to_string(bool b) {return b?"true":"false";}string to_string(const char* s) {return string(s);}string to_string(string s) {return s;}string to_string(vt<bool> v) {string res;FOR(sz(v))res+=char('0'+v[i]);return res;}template<size_t S> string to_string(bitset<S> b) {string res;FOR(S)res+=char('0'+b[i]);return res;}template<class T> string to_string(T v) {bool f=1;string res;EACH(x, v) {if(!f)res+=' ';f=0;res+=to_string(x);}return res;}template<class A> void pff(A x) {cout << to_string(x);}template<class H, class... T> void pff(const H& h, const T&... t) {pff(h);pff(t...);}void print() {pff("\n");}template<class H, class... T> void print(const H& h, const T&... t) {pff(h);if(sizeof...(t))pff(' ');print(t...);}struct PH{size_t operator()(const pair<int,int>&x)const{size_t ans=0;for(int i=0;i<x.first;i++)ans+=x.second;return ans;}};struct custom_hash {static uint64_t splitmix64(uint64_t x) {// http://xorshift.di.unimi.it/splitmix64.cx += 0x9e3779b97f4a7c15;x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;x = (x ^ (x >> 27)) * 0x94d049bb133111eb;return x ^ (x >> 31);}size_t operator()(uint64_t x) const {static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();return splitmix64(x + FIXED_RANDOM);}};// void DBG() {// cerr << "]" << endl;// }// template<class H, class... T> void DBG(H h, T... t) {// cerr << to_string(h);// if(sizeof...(t))// cerr << ", ";// DBG(t...);// }// // #ifdef _DEBUG// #define dbg(...) cerr << "LINE(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)// // #else// // #define dbg(...) 0// // #endiftemplate<class T> void offset(ll o, T& x) {x+=o;}template<class T> void offset(ll o, vt<T>& x) {EACH(a, x)offset(o, a);}template<class T, size_t S> void offset(ll o, ar<T, S>& x) {EACH(a, x)offset(o, a);}template<class T> void fk(T a) {print(a) ;exit(0) ;}void FIO(){#ifndef ONLINE_JUDGEfreopen("input.txt","r",stdin) ;freopen("output.txt","w",stdout) ;#endif}#define pf(n) return print(n)#define int lllong const M=1e9+7;const ll INF =1e18;// order_of_key (k) : Number of items strictly smaller than k .// find_by_order(k) : K-th element in a set (counting from zero).//Syntax to create a min heap for priority queue// priority_queue <T, vector<T>, greater<T>>pq ;//make sure to clear the adjacency list for every test case// check mxN size//check if numbers are big use powl,sqrtl,builtin_popcountll()......const long mxN =1e5+2 ;vt<int> adj[mxN] ;int anc[mxN][18],d[mxN],n,m;void dfs(int v,int p){anc[v][0]=p ;d[v]=d[p]+1 ;for(int i=1;i<18;i++)anc[v][i]=~anc[v][i-1]?anc[anc[v][i-1]][i-1]:-1 ;for(int x:adj[v])if(x^p)dfs(x,v) ;}int lca(int u,int v){if(d[u]<d[v])swap(u,v) ;for(int i=17;~i;--i)if(d[u]-(1<<i)>=d[v])u=anc[u][i] ;if(u==v)return u ;for(int i =17;~i;--i){if(anc[u][i]^anc[v][i]){u=anc[u][i],v=anc[v][i] ;}}return anc[u][0] ;}void solve(){read(n) ;FOR(n-1){int a,b;read(a,b) ;adj[a].pb(b) ;adj[b].pb(a) ;}dfs(1,0) ;vt<int>ans(n) ;iota(all(ans),1) ;do{int mx=-1 ;FOR(i,1,n){int x=ans[i-1],y=ans[i] ;int dt=d[x]+d[y]-2*d[lca(x,y)] ;umax(mx,dt) ;}if(mx<=3){print(ans) ;break ;}}while(next_permutation(all(ans))) ;FOR(i,n+2)adj[i].clear() ;mems(d,0) ;}signed main() {ios_base::sync_with_stdio(false);cin.tie(NULL);FIO() ;//cout << setprecision(20) << fixed ;int T=1;read(T);FOR(_,T){// pff("Case #", _+1, ": ");solve();}return 0;}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
input |
---|
100 8 5 2 2 3 3 7 ... |
correct output |
---|
1 8 2 5 6 7 3 4 1 7 2 8 3 6 4 5 1 4 6 2 7 5 8 3 1 8 3 2 4 7 6 5 1 6 4 7 5 2 3 8 ... |
user output |
---|
1 3 2 4 7 5 6 8 1 3 2 8 7 5 4 6 1 3 2 5 7 8 6 4 1 2 3 4 5 6 7 8 1 3 2 4 6 8 7 5 ... Truncated |
Test 2
Group: 2
Verdict: TIME LIMIT EXCEEDED
input |
---|
100 100 37 59 81 37 44 81 ... |
correct output |
---|
1 99 82 81 59 5 71 55 17 24 13... |
user output |
---|
(empty) |