Submission #151928

#TimeUsernameProblemLanguageResultExecution timeMemory
151928CaroLindaRail (IOI14_rail)C++14
0 / 100
385 ms54520 KiB
#include "rail.h" #include <bits/stdc++.h> #define printPii(p) printf("%d %d\n" , p.ff , p.ss ) #define lp(i,a,b) for(int i = a ;i<b;i++) #define pb push_back #define pii pair<int,int> #define ff first #define ss second #define sz size() #define mk make_pair const int MAXN = 5e3+10 ; const int inf = 1e9+10 ; using namespace std ; int n ; int ini[2] , idx[2] ; int m[MAXN][MAXN] ; bool marc[MAXN] ; vector<int> jaFoi[2] ; vector<pii> dist[2] ; void findDistance(int source, int whereToSave, bool yes) { marc[source] = true ; lp(i,0,n) if(!marc[i]) { m[source][i] = getDistance(source, i) ; if(yes) dist[whereToSave].pb( { m[source][i] , i } ) ; } if(yes) sort( dist[whereToSave].begin() , dist[whereToSave].end() ) ; } void findLocation(int N, int first, int location[], int stype[]) { n = N ; location[0] = first , stype[0] = 1 ; if(n==1) return ; findDistance(0,0,1); ini[1] = dist[0][0].ss ; findDistance(ini[1],1,1); dist[0].resize(0) ; ini[0] = dist[1][0].ss ; findDistance(ini[0],0,1); location[ini[1]] = first + m[0][ini[1]] ; location[ini[0]] = location[ini[1]] - m[ini[1]][ini[0]] ; stype[ini[1]] = 2 ; stype[ini[0]] = 1 ; lp(i,0,2) dist[i].pb({inf,inf}) ; jaFoi[1].pb(ini[0]) ; jaFoi[0].pb(ini[1]) ; m[ini[0]][ini[1]] = m[ini[1]][ini[0]] ; while(true) { pii p0 = dist[0][ idx[0] ] , p1 = dist[1][ idx[1] ] ; if(p0.ff == inf && p1.ff == inf) { break ; } int cur = p0.ss , cameFrom = 0 ; if(p0.ff > p1.ff) cur = p1.ss, cameFrom = 1 ; idx[cameFrom] ++ ; if( marc[cur] ) { continue ; } int fatMult = cameFrom == 0 ? 1 : -1 ; int contFatMult = fatMult == -1 ? 1 : -1 ; for(int i : jaFoi[cameFrom]) if( m[ini[cameFrom]][i] + m[i][cur] == m[ini[cameFrom]][cur] ) { location[cur] = location[i] + m[i][cur] * contFatMult ; stype[cur] = stype[i] ; marc[cur] = true ; break ; } if(marc[cur]) continue ; location[cur] = location[ini[cameFrom]] + m[ini[cameFrom]][cur] * fatMult ; stype[cur] = stype[ini[!cameFrom]] ; jaFoi[cameFrom].pb(cur) ; findDistance(cur,0,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...