Submission #1179349

#TimeUsernameProblemLanguageResultExecution timeMemory
1179349ema_nicoleRace (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include <iostream> #include <vector> #include <map> using namespace std; const int NMAX = 200002; using ll = long long; const int INF = 21e8; struct muchii { int nod, dist; }; vector <vector <muchii>> v; int n, k; int parent[NMAX]; int weight[NMAX]; ///ce weight are subarb resp void dfssize(int start) { weight[start] = 0; for(auto x : v[start]) { if(x.nod == parent[start]) continue; parent[x.nod] = start; dfssize(x.nod); weight[start] += weight[x.nod]; } weight[start]++; } int centroid = -1; void dfscentroid(int start, int sizee) { ///sizeul e de sus bool ok = 0; if(sizee > n / 2) ok = 1; for(auto x : v[start]) { if(x.nod == parent[start]) continue; if(weight[x.nod] > n / 2) ok = 1; } if(!ok) { ///am gasit centroidul centroid = start; return; } for(auto x : v[start]) { if(x.nod == parent[start]) continue; dfscentroid(x.nod, sizee + weight[start] - weight[x.nod]); } } map <ll, int> umap[NMAX]; int ans = INF; ///dist minima pt suma k void updateans(int start) { map <ll, int> lg; lg.clear(); if(umap[start].find(k) != umap[start].end()) ///dc deja e lant pana in el ans = min(ans, umap[start][k]); for(auto x : v[start]) { if(x.nod == parent[start]) continue; for(auto var : umap[x.nod]) { ///COMPARAM cu ce avem de la vechii fii if(lg.find(k - var.first - x.dist) != lg.end()) { ans = min(ans, lg[k - var.first - x.dist] + var.second + 1); //if(start == centroid) //cout << var.first << " " } } for(auto var : umap[x.nod]) { ///UPDATAM if(lg.find(var.first + x.dist) != lg.end()) lg[var.first + x.dist] = min(lg[var.first + x.dist], var.second + 1); else lg[var.first + x.dist] = var.second + 1; } } } void dfsans(int start) { bool ok = 0; for(auto x : v[start]) { if(x.nod == parent[start]) continue; dfsans(x.nod); ok = 1; for(auto var : umap[x.nod]) { ///updatam distantele din x.nod ///first = distanta, second = cate muchii if(umap[start].find(var.first + x.dist) != umap[start].end()) umap[start][var.first + x.dist] = min(umap[start][var.first + x.dist], var.second + 1); else umap[start][var.first + x.dist] = var.second + 1; } umap[start][x.dist] = 1; } if(!ok) ///frunza umap[start][0] = 0; else ///cautam dc exista drumuri de suma k updateans(start); /*cout << "NODUL " << start << '\n'; for(auto var : umap[start]) cout << var.first << " " << var.second << '\n';*/ } int best_path(int N, int K, int h[NMAX][2], int l[NMAX]) { n = N, k = K; v.resize(n + 1); for(int i = 0; i < n - 1; i++) { v[h[i][0]].push_back({h[i][1], l[i]}); v[h[i][1]].push_back({h[i][0], l[i]}); } /*for(int i = 0; i < n; i++) { cout << "nodul " << i << '\n'; for(auto x : v[i]) cout << x.nod << " "; cout << '\n'; }*/ parent[0] = -1; dfssize(0); /*for(int i = 0; i < n; i++) cout << weight[i] << " "; cout << '\n';*/ dfscentroid(0, 0); parent[centroid] = -1; dfssize(centroid); ///reindexam parintii /*for(int i = 0; i < n; i++) cout << parent[i] << " "; cout << '\n';*/ dfsans(centroid); for(int i = 48; i < 51; i += 2) { cout << "NODUL " << i << '\n'; for(auto var : umap[i]) cout << var.first + (i - 1) % 2 << " " << var.second << '\n'; //if(umap[i].find(k) != umap[i].end()) //cout << "NODUL " << i << " " << umap[i][k] << '\n'; } if(ans == INF) ans = -1; return ans; } int h[NMAX][2]; int l[NMAX]; int main() { int N, K; cin >> N >> K; for(int i = 0; i < N - 1; i++) cin >> h[i][0] >> h[i][1] >> l[i]; cout << best_path(N, K, h, l); return 0; } /* 100 100 0 1 3 1 2 6 2 3 1 3 4 9 4 5 8 5 6 0 6 7 6 7 8 10 8 9 4 9 10 5 10 11 1 11 12 1 12 13 9 13 14 4 14 15 5 15 16 7 16 17 7 17 18 5 18 19 6 19 20 8 20 21 1 21 22 5 22 23 1 23 24 2 24 25 3 25 26 7 26 27 8 27 28 3 28 29 9 29 30 9 30 31 3 31 32 1 32 33 8 33 34 5 34 35 6 35 36 5 36 37 5 37 38 2 38 39 8 39 40 1 40 41 3 41 42 0 42 43 2 43 44 8 44 45 3 45 46 8 46 47 5 47 48 3 48 49 0 49 50 1 50 51 0 51 52 3 52 53 3 53 54 3 54 55 7 55 56 6 56 57 2 57 58 1 58 59 3 59 60 5 60 61 2 61 62 2 62 63 9 63 64 3 64 65 3 65 66 0 66 67 1 67 68 8 68 69 9 69 70 1 70 71 0 71 72 7 72 73 5 73 74 7 74 75 7 75 76 3 76 77 6 77 78 5 78 79 6 79 80 2 80 81 2 81 82 7 82 83 4 83 84 2 84 85 0 85 86 4 86 87 0 87 88 7 88 89 8 89 90 5 90 91 8 91 92 9 92 93 0 93 94 5 94 95 8 95 96 8 96 97 3 97 98 9 98 99 0 12 11 12 0 1 0 2 2 3 3 4 4 5 0 6 6 7 6 8 8 9 8 10 3 4 5 4 6 3 2 5 6 7 */

Compilation message (stderr)

/usr/bin/ld: /tmp/cczMmLOt.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccp9ZbRo.o:race.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status