Task: | Tietoverkko |
Sender: | Sahari Kempo |
Submission time: | 2021-10-17 01:35:34 +0300 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | RUNTIME ERROR | 0 |
#2 | RUNTIME ERROR | 0 |
#3 | RUNTIME ERROR | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | RUNTIME ERROR | 0.57 s | 1, 2, 3 | details |
#2 | RUNTIME ERROR | 0.65 s | 2, 3 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Compiler report
input/code.cpp: In function 'std::vector<long long int> erittely(long long int)': input/code.cpp:89:3: warning: this 'if' clause does not guard... [-Wmisleading-indentation] if (kom + sum <= k); ^~ input/code.cpp:90:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if' { ^ input/code.cpp: In function 'long long int etsi(long long int, long long int)': input/code.cpp:156:28: warning: left operand of comma operator has no effect [-Wunused-value] if (d < 0) a, c = f(b, -d); ^ input/code.cpp:157:31: warning: left operand of comma operator has no effect [-Wunused-value] else if (d > 0) b, c = f(a, d); ^ input/code.cpp:187:1: warning: control reaches end of non-void function [-Wreturn-type] } ^
Code
#include <math.h> #include <iostream> #include <map> #include <vector> #define L long long using namespace std; void definef(); vector<L> erittely(L k); pair<L,L> ylos(L a, L k); pair<L, L> ylos(L a, L k, L c); L f(L x, L k); L etsi(L a, L b); map<L, pair<pair<L, L>, L>> m = { {1, { {0, 0}, 1 }} }; map<L, map<L, pair<L, L>>> fx; L n; int main() { L a, b, x, k = 0; cin >> n; L kerros = 1; L e = 0; for (L i = 0; i < n - 1; i++) { cin >> a >> b >> x; if (a < e) kerros = m[a].second; e = b; kerros++; m[b] = { {a, x}, kerros }; } definef(); for (L i = 1; i < n; i++) { for (L j = i + 1; j < n + 1; j++) { k += etsi(i, j); } } cout << k << "\n"; } void definef() { for (L i = 1; i <= n; i *= 2) { for (L j = 1 + i; j <= n; j++) { pair<L,L> p = ylos(j, i); fx[i][j] = p; } } } vector<L> erittely(L k) { vector<L> komponentit; L sum = 0; L i = 0; L kom = 0; while (true) { kom = powl(2, i); if (kom > k) { kom = powl(2, i - 1); komponentit.push_back(kom); sum = kom; break; } else if (kom == k) { komponentit.push_back(kom); sum = kom; break; } i++; } while (sum != k) { kom = kom / 2; if (kom + sum <= k); { kom *= 2; komponentit.push_back(kom); sum += kom; } } return komponentit; } pair<L,L> ylos(L a, L k) { L minx = 1000000000; for (L i = 0; i < k; i++) { if (a == 1) break; if (minx == 1) break; if (m[a].first.second < minx) minx = m[a].first.second; a = m[a].first.first; } if (minx == 1000000000) { pair<L, L> p = { a, 0 }; return p; } pair<L, L> p = { a, minx }; return p; } pair<L, L> ylos(L a, L k, L c) { L minx = 1000000000; for (L i = 0; i < k; i++) { if (a == 1) break; if (minx == 1) break; if (m[a].first.second < minx) minx = m[a].first.second; a = m[a].first.first; } if (c < minx) minx = c; if (minx == 1000000000) { pair<L, L> p = { a, 0 }; return p; } pair<L, L> p = { a, minx }; return p; } L f(L x, L k) { vector<L> komponentit = erittely(k); L c = 0; for (auto kom : komponentit) { c = fx[kom][x].second; if (fx[kom][x].first == 1 || c == 1) break; x = fx[kom][x].first; } return c; } L etsi(L a, L b) { L c = 1000000000, c2 = 1000000000, d = m[a].second - m[b].second; if (d < 0) a, c = f(b, -d); else if (d > 0) b, c = f(a, d); if (a == b) { c = m[a].first.second; } else { pair<L, L> p; while (a != b) { if (a != 1) { p = ylos(a, 1, c); a = p.first; c = p.second; } if (b != 1) { p = ylos(b, 1, c2); b = p.first; c2 = p.second; } } } if (c == 0 && c2 != 0) return c2; else if (c != 0 && c2 == 0) return c; else if (c <= c2) return c; else if (c > c2) return c2; }
Test details
Test 1
Group: 1, 2, 3
Verdict: RUNTIME ERROR
input |
---|
100 1 2 74 1 3 100 2 4 50 3 5 40 ... |
correct output |
---|
88687 |
user output |
---|
(empty) |
Test 2
Group: 2, 3
Verdict: RUNTIME ERROR
input |
---|
5000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
correct output |
---|
1103702320243776 |
user output |
---|
(empty) |
Test 3
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
200000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
correct output |
---|
1080549209850010931 |
user output |
---|
(empty) |