#include <bits/stdc++.h>
using namespace std;
vector<int> getMinimumLength(int roads_nodes, vector<int> roads_from, vector<int> roads_to, vector<int> roads_weight) {
const int n = roads_nodes;
const int m = (int)roads_from.size();
vector<vector<pair<int,int>>> adj(n + 1), rev(n + 1);
for (int i = 0; i < m; ++i) {
adj[roads_from[i]].push_back({roads_to[i], roads_weight[i]});
rev[roads_to[i]].push_back({roads_from[i], roads_weight[i]});
}
const long long INF = LLONG_MAX;
vector<long long> dist(n + 1);
vector<int> result(n, 0);
using P = pair<long long, int>;
for (int x = 1; x <= n; ++x) {
fill(dist.begin(), dist.end(), INF);
dist[x] = 0;
priority_queue<P, vector<P>, greater<P>> pq;
pq.push({0, x});
while (!pq.empty()) {
auto [d, u] = pq.top(); pq.pop();
if (d > dist[u]) continue;
for (auto [v, w] : adj[u]) {
long long nd = d + w;
if (nd < dist[v]) {
dist[v] = nd;
pq.push({nd, v});
}
}
}
long long best = INF;
for (auto [u, w] : rev[x]) {
if (dist[u] != INF) best = min(best, dist[u] + (long long)w);
}
result[x - 1] = (best == INF) ? 0 : (int)best;
}
return result;
}
// ---------- Test harness ----------
static void runTest(const string& name,
int n,
vector<int> from, vector<int> to, vector<int> w,
vector<int> expected) {
vector<int> got = getMinimumLength(n, from, to, w);
cout << name << "\n";
cout << " Expected: [";
for (size_t i = 0; i < expected.size(); ++i)
cout << expected[i] << (i + 1 < expected.size() ? ", " : "");
cout << "]\n";
cout << " Got: [";
for (size_t i = 0; i < got.size(); ++i)
cout << got[i] << (i + 1 < got.size() ? ", " : "");
cout << "]\n";
cout << " " << (got == expected ? "PASS" : "FAIL") << "\n\n";
}
int main() {
// Problem-statement example: 4 nodes, edges 1->2:14, 2->3:23, 3->1:23, 4->3:30
runTest("Example (problem statement)",
4,
{1, 2, 3, 4},
{2, 3, 1, 3},
{14, 23, 23, 30},
{60, 60, 60, 0});
// Sample Case 0: triangle 1->2->3->1, all weights 10
runTest("Sample Case 0",
3,
{1, 2, 3},
{2, 3, 1},
{10, 10, 10},
{30, 30, 30});
// Sample Case 1: 4 nodes, 5 edges
// 1->3:20, 3->2:25, 2->1:15, 4->2:10, 1->4:5
runTest("Sample Case 1",
4,
{1, 3, 2, 4, 1},
{3, 2, 1, 2, 4},
{20, 25, 15, 10, 5},
{30, 30, 60, 30});
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiBnZXRNaW5pbXVtTGVuZ3RoKGludCByb2Fkc19ub2RlcywgdmVjdG9yPGludD4gcm9hZHNfZnJvbSwgdmVjdG9yPGludD4gcm9hZHNfdG8sIHZlY3RvcjxpbnQ+IHJvYWRzX3dlaWdodCkgewogICAgY29uc3QgaW50IG4gPSByb2Fkc19ub2RlczsKICAgIGNvbnN0IGludCBtID0gKGludClyb2Fkc19mcm9tLnNpemUoKTsKCiAgICB2ZWN0b3I8dmVjdG9yPHBhaXI8aW50LGludD4+PiBhZGoobiArIDEpLCByZXYobiArIDEpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgICAgICBhZGpbcm9hZHNfZnJvbVtpXV0ucHVzaF9iYWNrKHtyb2Fkc190b1tpXSwgcm9hZHNfd2VpZ2h0W2ldfSk7CiAgICAgICAgcmV2W3JvYWRzX3RvW2ldXS5wdXNoX2JhY2soe3JvYWRzX2Zyb21baV0sIHJvYWRzX3dlaWdodFtpXX0pOwogICAgfQoKICAgIGNvbnN0IGxvbmcgbG9uZyBJTkYgPSBMTE9OR19NQVg7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBkaXN0KG4gKyAxKTsKICAgIHZlY3RvcjxpbnQ+IHJlc3VsdChuLCAwKTsKICAgIHVzaW5nIFAgPSBwYWlyPGxvbmcgbG9uZywgaW50PjsKCiAgICBmb3IgKGludCB4ID0gMTsgeCA8PSBuOyArK3gpIHsKICAgICAgICBmaWxsKGRpc3QuYmVnaW4oKSwgZGlzdC5lbmQoKSwgSU5GKTsKICAgICAgICBkaXN0W3hdID0gMDsKCiAgICAgICAgcHJpb3JpdHlfcXVldWU8UCwgdmVjdG9yPFA+LCBncmVhdGVyPFA+PiBwcTsKICAgICAgICBwcS5wdXNoKHswLCB4fSk7CgogICAgICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgICAgICBhdXRvIFtkLCB1XSA9IHBxLnRvcCgpOyBwcS5wb3AoKTsKICAgICAgICAgICAgaWYgKGQgPiBkaXN0W3VdKSBjb250aW51ZTsKICAgICAgICAgICAgZm9yIChhdXRvIFt2LCB3XSA6IGFkalt1XSkgewogICAgICAgICAgICAgICAgbG9uZyBsb25nIG5kID0gZCArIHc7CiAgICAgICAgICAgICAgICBpZiAobmQgPCBkaXN0W3ZdKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzdFt2XSA9IG5kOwogICAgICAgICAgICAgICAgICAgIHBxLnB1c2goe25kLCB2fSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGxvbmcgbG9uZyBiZXN0ID0gSU5GOwogICAgICAgIGZvciAoYXV0byBbdSwgd10gOiByZXZbeF0pIHsKICAgICAgICAgICAgaWYgKGRpc3RbdV0gIT0gSU5GKSBiZXN0ID0gbWluKGJlc3QsIGRpc3RbdV0gKyAobG9uZyBsb25nKXcpOwogICAgICAgIH0KICAgICAgICByZXN1bHRbeCAtIDFdID0gKGJlc3QgPT0gSU5GKSA/IDAgOiAoaW50KWJlc3Q7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9CgovLyAtLS0tLS0tLS0tIFRlc3QgaGFybmVzcyAtLS0tLS0tLS0tCnN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgICAgIGludCBuLAogICAgICAgICAgICAgICAgICAgIHZlY3RvcjxpbnQ+IGZyb20sIHZlY3RvcjxpbnQ+IHRvLCB2ZWN0b3I8aW50PiB3LAogICAgICAgICAgICAgICAgICAgIHZlY3RvcjxpbnQ+IGV4cGVjdGVkKSB7CiAgICB2ZWN0b3I8aW50PiBnb3QgPSBnZXRNaW5pbXVtTGVuZ3RoKG4sIGZyb20sIHRvLCB3KTsKCiAgICBjb3V0IDw8IG5hbWUgPDwgIlxuIjsKICAgIGNvdXQgPDwgIiAgRXhwZWN0ZWQ6IFsiOwogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZC5zaXplKCk7ICsraSkKICAgICAgICBjb3V0IDw8IGV4cGVjdGVkW2ldIDw8IChpICsgMSA8IGV4cGVjdGVkLnNpemUoKSA/ICIsICIgOiAiIik7CiAgICBjb3V0IDw8ICJdXG4iOwoKICAgIGNvdXQgPDwgIiAgR290OiAgICAgIFsiOwogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnb3Quc2l6ZSgpOyArK2kpCiAgICAgICAgY291dCA8PCBnb3RbaV0gPDwgKGkgKyAxIDwgZ290LnNpemUoKSA/ICIsICIgOiAiIik7CiAgICBjb3V0IDw8ICJdXG4iOwoKICAgIGNvdXQgPDwgIiAgIiA8PCAoZ290ID09IGV4cGVjdGVkID8gIlBBU1MiIDogIkZBSUwiKSA8PCAiXG5cbiI7Cn0KCmludCBtYWluKCkgewogICAgLy8gUHJvYmxlbS1zdGF0ZW1lbnQgZXhhbXBsZTogNCBub2RlcywgZWRnZXMgMS0+MjoxNCwgMi0+MzoyMywgMy0+MToyMywgNC0+MzozMAogICAgcnVuVGVzdCgiRXhhbXBsZSAocHJvYmxlbSBzdGF0ZW1lbnQpIiwKICAgICAgICAgICAgNCwKICAgICAgICAgICAgezEsIDIsIDMsIDR9LAogICAgICAgICAgICB7MiwgMywgMSwgM30sCiAgICAgICAgICAgIHsxNCwgMjMsIDIzLCAzMH0sCiAgICAgICAgICAgIHs2MCwgNjAsIDYwLCAwfSk7CgogICAgLy8gU2FtcGxlIENhc2UgMDogdHJpYW5nbGUgMS0+Mi0+My0+MSwgYWxsIHdlaWdodHMgMTAKICAgIHJ1blRlc3QoIlNhbXBsZSBDYXNlIDAiLAogICAgICAgICAgICAzLAogICAgICAgICAgICB7MSwgMiwgM30sCiAgICAgICAgICAgIHsyLCAzLCAxfSwKICAgICAgICAgICAgezEwLCAxMCwgMTB9LAogICAgICAgICAgICB7MzAsIDMwLCAzMH0pOwoKICAgIC8vIFNhbXBsZSBDYXNlIDE6IDQgbm9kZXMsIDUgZWRnZXMKICAgIC8vIDEtPjM6MjAsIDMtPjI6MjUsIDItPjE6MTUsIDQtPjI6MTAsIDEtPjQ6NQogICAgcnVuVGVzdCgiU2FtcGxlIENhc2UgMSIsCiAgICAgICAgICAgIDQsCiAgICAgICAgICAgIHsxLCAzLCAyLCA0LCAxfSwKICAgICAgICAgICAgezMsIDIsIDEsIDIsIDR9LAogICAgICAgICAgICB7MjAsIDI1LCAxNSwgMTAsIDV9LAogICAgICAgICAgICB7MzAsIDMwLCA2MCwgMzB9KTsKCiAgICByZXR1cm4gMDsKfQ==