160742025-03-30 19:23:00szilAutópálya inflációcpp17Time limit exceeded 15/1002.091s6236 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 = 55;
const int BLOCK_SIZE = 60;

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();
        // ll x;
        // cin >> u[i] >> v[i] >> x;
        // for (int j = BLOCK_CNT-1; j >= 0; j--) {
        //     w[i].data[j] = x & ((1ll<<(1+BLOCK_SIZE))-1);
        //     x >>= (1 + BLOCK_SIZE);
        // }
    }
    vector<bigint> dist_last(n+1);
    dist_last[1].clear();
    for (int i = 1; i <= m; 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.078s6016 KiB
subtask20/8
3Time limit exceeded2.088s4596 KiB
4Time limit exceeded2.088s4588 KiB
5Time limit exceeded2.089s4596 KiB
6Time limit exceeded2.089s4600 KiB
7Time limit exceeded2.084s4608 KiB
subtask315/15
8Accepted1ms316 KiB
9Accepted1ms316 KiB
10Accepted2ms316 KiB
11Accepted1ms316 KiB
12Accepted1ms328 KiB
13Accepted1ms316 KiB
14Accepted1ms508 KiB
15Accepted1ms316 KiB
16Accepted1ms348 KiB
17Accepted1ms528 KiB
18Accepted1ms316 KiB
subtask40/34
19Time limit exceeded2.078s6132 KiB
20Time limit exceeded2.078s5940 KiB
21Time limit exceeded2.078s5940 KiB
22Time limit exceeded2.078s5992 KiB
23Time limit exceeded2.082s6016 KiB
24Time limit exceeded2.082s5940 KiB
25Time limit exceeded2.084s5940 KiB
26Time limit exceeded2.084s6132 KiB
27Time limit exceeded2.079s5940 KiB
28Time limit exceeded2.078s4612 KiB
29Time limit exceeded2.078s4608 KiB
30Time limit exceeded2.079s4148 KiB
31Time limit exceeded2.084s4592 KiB
32Time limit exceeded2.085s6236 KiB
33Time limit exceeded2.085s6124 KiB
subtask50/21
34Wrong answer694ms1524 KiB
35Time limit exceeded2.085s1820 KiB
36Time limit exceeded2.085s1772 KiB
37Time limit exceeded2.085s1780 KiB
38Time limit exceeded2.078s1588 KiB
39Time limit exceeded2.088s1588 KiB
40Time limit exceeded2.088s1588 KiB
41Time limit exceeded2.088s1588 KiB
42Wrong answer188ms1120 KiB
43Wrong answer189ms1116 KiB
44Wrong answer189ms1076 KiB
45Wrong answer189ms1076 KiB
46Wrong answer188ms1076 KiB
47Wrong answer174ms1076 KiB
48Wrong answer671ms1336 KiB
49Wrong answer670ms1332 KiB
subtask60/22
50Time limit exceeded2.081s6020 KiB
51Time limit exceeded2.079s6020 KiB
52Time limit exceeded2.081s5952 KiB
53Time limit exceeded2.081s6072 KiB
54Time limit exceeded2.091s6212 KiB
55Time limit exceeded2.091s6068 KiB
56Time limit exceeded2.091s5940 KiB
57Time limit exceeded2.091s5940 KiB
58Wrong answer792ms1820 KiB
59Time limit exceeded2.085s4604 KiB
60Time limit exceeded2.085s4600 KiB
61Time limit exceeded2.085s4600 KiB
62Time limit exceeded2.091s4568 KiB
63Time limit exceeded2.078s4572 KiB
64Time limit exceeded2.081s6156 KiB
65Time limit exceeded2.081s6004 KiB
66Time limit exceeded2.088s5940 KiB