#include using namespace std; const int nmax=5e3+42,C=100000; int n,m,l,k; vector< pair > adj[nmax]; long long dist[nmax][nmax]; long long d[nmax]; bool in_queue[nmax]; queue q; void spfa(int v) { for(int i=1;i<=n;i++) d[i]=1e18; d[v]=0; in_queue[v]=1; q.push(v); while(q.size()) { int u=q.front(); q.pop(); in_queue[u]=0; for(auto i:adj[u]) if(d[i.first]>d[u]+i.second) { d[i.first]=d[u]+i.second; if(in_queue[i.first]==0) { in_queue[i.first]=1; q.push(i.first); } } } for(int i=1;i<=n;i++) dist[v][i]=d[i]; } pair score[nmax]; bool cmp(pair a,pair b) { return a.first>b.first; } int house[nmax]; mt19937 rng(42); vector< pair > mem[nmax]; vector< pair > coeff[nmax]; int run_cnt=0; void run() { run_cnt++; int node=1; score[node].first++; for(int i=1;i<=C;i++) { int add; double cur=1.0*rng()/(1LL<<32); int pos=lower_bound(mem[node].begin(),mem[node].end(),make_pair(cur,0))-mem[node].begin(); if(pos==mem[node].size())pos--; node=mem[node][pos].second; score[node].first++; } } long long outp() { vector arr={}; int node=1; for(int i=1;i<=C;i++) { int add; double cur=1.0*rng()/(1LL<<32); int pos=lower_bound(mem[node].begin(),mem[node].end(),make_pair(cur,0))-mem[node].begin(); add=mem[node][pos].second; arr.push_back(add); node=add; } long long score=0; for(int i=1;icur)where=node,mini=cur; } printf("%i ",where); house[i]=where; } printf("\n"); //printf("%lld\n%i\n",outp(),run_cnt); return 0; }