160732025-03-30 19:17:12szilAutópálya inflációcpp17Time limit exceeded 15/1002.101s5820 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const ll MOD = 1e9+7;
const int MAXM = 6001;

const int BLOCK_CNT = 50;
const int BLOCK_SIZE = 62;

const ll MULTI = (1ll<<(1+BLOCK_SIZE))%MOD;

struct bigint {

    vector<uint64_t> data;

    bigint() {
        data.assign(BLOCK_CNT, ~0ull);
    }

    void clear() {
        data.assign(BLOCK_CNT, 0ull);
    }

    bool operator<(const bigint &rhs) {
        for (int i = 0; i < BLOCK_CNT; i++) {
            if (data[i] != rhs.data[i]) {
                return data[i] < rhs.data[i];
            }
        }
        return 0;
    }

    bigint operator+(const bigint &rhs) {
        bigint res;
        res.clear();
        bool carry = 0;
        for (int i = BLOCK_CNT-1; i >= 0; i--) {
            res.data[i] = data[i] + rhs.data[i] + carry;
            carry = (res.data[i] >> (BLOCK_SIZE + 1)) & 1;
            res.data[i] &= ~(1ll << (BLOCK_SIZE + 1));
        }

        return res;
    }

    void inflate() {
        bool carry = 0;
        for (int i = BLOCK_CNT-1; i >= 0; i--) {
            bool next_carry = (data[i] >> BLOCK_SIZE) & 1;
            data[i] &= ~(1ll << BLOCK_SIZE);
            data[i] <<= 1;
            data[i] |= carry;
            carry = next_carry;
        }
    }

    ll calc_ans() {
        ll ans = 0;
        ll mul = 1;
        for (int i = BLOCK_CNT-1; i >= 0; i--) {
            ans += data[i] * mul;
            ans %= MOD;
            mul *= MULTI;
            mul %= MOD;
        }
        return ans;
    }
};

int u[MAXM], v[MAXM];

void solve() {
    int n, m; cin >> n >> m;
    vector<bigint> w(m+1);
    for (int i = 1; i <= m; i++) {
        w[i].clear();
        cin >> u[i] >> v[i] >> w[i].data.back();
    }
    vector<bigint> dist_last(n+1);
    dist_last[1].clear();
    for (int i = 1; i <= n; i++) {
        vector<bigint> dist_curr = dist_last;
        for (int j = 1; j <= m; j++) {
            if (dist_last[u[j]] + w[j] < dist_curr[v[j]]) {
                dist_curr[v[j]] = dist_last[u[j]] + w[j];
            }
        }
        for (int j = 1; j <= m; j++) {
            if (dist_last[v[j]] + w[j] < dist_curr[u[j]]) {
                dist_curr[u[j]] = dist_last[v[j]] + w[j];
            }
        }

        dist_last = dist_curr;

        for (int j = 1; j <= m; j++) {
            w[j].inflate();
        }
    }

    for (int i = 2; i <= n; i++) {
        cout << dist_last[i].calc_ans() << "\n";
    }
    cout << "\n";
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1; 
    // cin >> t;
    while (t--) solve();
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Time limit exceeded2.086s5688 KiB
subtask20/8
3Time limit exceeded2.088s4312 KiB
4Time limit exceeded2.088s4320 KiB
5Time limit exceeded2.088s4332 KiB
6Time limit exceeded2.088s4316 KiB
7Time limit exceeded2.075s4316 KiB
subtask315/15
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
12Accepted1ms328 KiB
13Accepted1ms316 KiB
14Accepted1ms316 KiB
15Accepted1ms316 KiB
16Accepted1ms316 KiB
17Accepted1ms316 KiB
18Accepted1ms316 KiB
subtask40/34
19Time limit exceeded2.099s5432 KiB
20Time limit exceeded2.099s5428 KiB
21Time limit exceeded2.101s5652 KiB
22Time limit exceeded2.099s5644 KiB
23Time limit exceeded2.082s5644 KiB
24Time limit exceeded2.082s5620 KiB
25Time limit exceeded2.082s5428 KiB
26Time limit exceeded2.084s5820 KiB
27Time limit exceeded2.075s5428 KiB
28Time limit exceeded2.073s4340 KiB
29Time limit exceeded2.075s4148 KiB
30Time limit exceeded2.075s3892 KiB
31Time limit exceeded2.092s4304 KiB
32Time limit exceeded2.092s5628 KiB
33Time limit exceeded2.092s5628 KiB
subtask50/21
34Wrong answer293ms1076 KiB
35Accepted574ms1588 KiB
36Accepted573ms1588 KiB
37Accepted572ms1780 KiB
38Accepted573ms1588 KiB
39Accepted574ms1736 KiB
40Wrong answer563ms1784 KiB
41Wrong answer564ms1588 KiB
42Wrong answer157ms820 KiB
43Wrong answer159ms1076 KiB
44Wrong answer159ms1260 KiB
45Wrong answer160ms1072 KiB
46Wrong answer158ms1068 KiB
47Wrong answer146ms820 KiB
48Wrong answer284ms1280 KiB
49Wrong answer284ms1076 KiB
subtask60/22
50Time limit exceeded2.088s5644 KiB
51Time limit exceeded2.088s5660 KiB
52Time limit exceeded2.089s5612 KiB
53Time limit exceeded2.089s5644 KiB
54Time limit exceeded2.086s5656 KiB
55Time limit exceeded2.086s5644 KiB
56Time limit exceeded2.088s5660 KiB
57Time limit exceeded2.088s5428 KiB
58Wrong answer675ms1780 KiB
59Time limit exceeded2.088s4516 KiB
60Time limit exceeded2.091s4316 KiB
61Time limit exceeded2.091s4316 KiB
62Time limit exceeded2.092s4280 KiB
63Time limit exceeded2.085s4292 KiB
64Time limit exceeded2.088s5660 KiB
65Time limit exceeded2.088s5624 KiB
66Time limit exceeded2.082s5428 KiB