제출 #120748

#제출 시각아이디문제언어결과실행 시간메모리
120748patrikpavic2철로 (IOI14_rail)C++17
30 / 100
3057 ms223260 KiB
#include "rail.h" #include <vector> #include <algorithm> using namespace std; #define X first #define Y second #define PB push_back const int N = 5055; const int M = 1e6 + 500; typedef pair < int, int > pii; int dis[N][N], par[N], m, ty[N], l[N]; vector < pii > v[M]; vector < int > g[N]; void dfs(int x,int lst){ //printf("X = %d TY = %d L = %d\n", x, ty[x], l[x]); for(int y : g[x]){ if(y == lst) continue; ty[y] = !ty[x]; if(ty[x]) l[y] = l[x] - dis[x][y]; else l[y] = l[x] + dis[x][y]; dfs(y, x); } } void findLocation(int n, int first, int loc[], int type[]){ l[0] = first; for(int i = 0;i < n;i++){ par[i] = i; for(int j = i + 1;j < n;j++){ dis[i][j] = getDistance(i, j); dis[j][i] = dis[i][j]; if(dis[i][j] >= M) continue; v[dis[i][j]].PB({i, j}); } } for(int i = 0;i < M;i++){ for(pii vv : v[i]){ if(par[vv.X] == par[vv.Y]) continue; //printf("evo me %d %d\n", v[i].X, v[i].Y); int r = par[vv.Y]; for(int i = 0;i < n;i++){ if(par[i] == r) par[i] = par[vv.X]; } g[vv.X].PB(vv.Y); g[vv.Y].PB(vv.X); } } dfs(0,0); for(int i = 0;i < n;i++){ type[i] = ty[i] + 1; loc[i] = l[i]; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...