160782025-03-30 19:38:28szilAutópálya inflációcpp17Time limit exceeded 36/1002.099s3780 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

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

const int BLOCK_CNT = 30;
const int BLOCK_SIZE = 30;

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];
bool vis[MAXN];

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();
    vis[1] = 1;
    for (int i = 1; i <= n; i++) {
        vector<bigint> dist_curr = dist_last;
        for (int j = 1; j <= m; j++) {
            bigint new_dist = dist_last[u[j]] + w[j];
            if (vis[u[j]] && new_dist < dist_curr[v[j]]) {
                dist_curr[v[j]] = dist_last[u[j]] + w[j];
                vis[v[j]] = 1;
            }
        }
        for (int j = 1; j <= m; j++) {
            bigint new_dist = dist_last[v[j]] + w[j];
            if (vis[v[j]] && new_dist < dist_curr[u[j]]) {
                dist_curr[u[j]] = new_dist;
                vis[u[j]] = 1;
            }
        }

        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.092s3636 KiB
subtask20/8
3Time limit exceeded2.086s2880 KiB
4Time limit exceeded2.088s2912 KiB
5Time limit exceeded2.088s2912 KiB
6Time limit exceeded2.088s2868 KiB
7Time limit exceeded2.085s2916 KiB
subtask315/15
8Accepted1ms508 KiB
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms508 KiB
12Accepted1ms316 KiB
13Accepted1ms316 KiB
14Accepted1ms316 KiB
15Accepted1ms316 KiB
16Accepted1ms316 KiB
17Accepted1ms316 KiB
18Accepted1ms316 KiB
subtask40/34
19Time limit exceeded2.099s3772 KiB
20Time limit exceeded2.099s3748 KiB
21Time limit exceeded2.099s3760 KiB
22Time limit exceeded2.099s3772 KiB
23Time limit exceeded2.079s3636 KiB
24Time limit exceeded2.082s3768 KiB
25Time limit exceeded2.082s3644 KiB
26Time limit exceeded2.082s3648 KiB
27Time limit exceeded2.081s3636 KiB
28Time limit exceeded2.084s2928 KiB
29Time limit exceeded2.084s2924 KiB
30Time limit exceeded2.084s2752 KiB
31Time limit exceeded2.085s3060 KiB
32Time limit exceeded2.086s3748 KiB
33Time limit exceeded2.088s3764 KiB
subtask521/21
34Accepted187ms820 KiB
35Accepted354ms1280 KiB
36Accepted354ms1076 KiB
37Accepted354ms1080 KiB
38Accepted351ms1276 KiB
39Accepted354ms1276 KiB
40Accepted342ms1268 KiB
41Accepted342ms1280 KiB
42Accepted104ms820 KiB
43Accepted104ms852 KiB
44Accepted104ms1004 KiB
45Accepted104ms860 KiB
46Accepted104ms836 KiB
47Accepted98ms836 KiB
48Accepted181ms820 KiB
49Accepted181ms824 KiB
subtask60/22
50Time limit exceeded2.085s3780 KiB
51Time limit exceeded2.085s3756 KiB
52Time limit exceeded2.085s3636 KiB
53Time limit exceeded2.085s3636 KiB
54Time limit exceeded2.079s3780 KiB
55Time limit exceeded2.079s3780 KiB
56Time limit exceeded2.079s3636 KiB
57Time limit exceeded2.081s3636 KiB
58Wrong answer423ms1276 KiB
59Time limit exceeded2.081s2928 KiB
60Time limit exceeded2.082s2924 KiB
61Time limit exceeded2.081s2924 KiB
62Time limit exceeded2.088s2884 KiB
63Time limit exceeded2.085s3108 KiB
64Time limit exceeded2.085s3764 KiB
65Time limit exceeded2.086s3760 KiB
66Time limit exceeded2.082s3732 KiB