10482 2024. 04. 03 11:28:52 Valaki2 Autópálya infláció cpp17 Időlimit túllépés 23/100 2.099s 19700 KiB
#include <bits/stdc++.h>
using namespace std;

#define distance distance1337

#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second

const int maxn = 3100;
const int mod = 1e9 + 7;
const int k = 2; // log2 max c_i + epsilon

struct distance {
    bitset<1 + maxn> bs;
    distance() {
        bs = 0;
    }
    distance(int num) {
        if(num == -1) {
            bs.set();
        } else {
            bs = num;
        }
    }
    distance(bitset<1 + maxn> bs_) {
        bs = bs_;
    }
    bool operator < (const distance &other) const {
        // reversed
        for(int i = maxn; i >= 0; i--) {
            if(other.bs[i] ^ bs[i]) {
                if(other.bs[i] > bs[i]) {
                    return false;
                } else {
                    return true;
                }
            }
        }
        return false;
    }
    // debug
    void print() {
        cout << bs.to_ullong();
    }
};

const distance inf = distance(-1);

int n, m;
vector<pii > graph[1 + maxn];
distance dist[1 + maxn][1 + k];
bool done[1 + maxn][1 + k];
int steps[1 + maxn];

void solve() {
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int a, b, c;
        cin >> a >> b >> c;
        graph[a].pb(mp(b, c));
        graph[b].pb(mp(a, c));
    }
    queue<int> bfsq;
    bfsq.push(1);
    while(!bfsq.empty()) {
        int cur = bfsq.front();
        bfsq.pop();
        for(pii nei : graph[cur]) {
            if(nei.fi != 1 && steps[nei.fi] == 0) {
                bfsq.push(nei.fi);
                steps[nei.fi] = steps[cur] + 1;
            }
        }
    }
    priority_queue<pair<distance, pii > > q;
    for(int i = 1; i <= n; i++) {
        for(int j = 0; j <= k; j++) {
            dist[i][j] = distance(-1);
        }
    }
    dist[1][0].bs = 0;
    q.push(mp(dist[1][0], mp(1, 0)));
    while(!q.empty()) {
        pii curpair = q.top().se;
        q.pop();
        int cur = curpair.fi, cur_steps = curpair.se;
        int cur_idx = cur_steps - steps[cur];
        // cout << cur << " " << cur_steps << " " << cur_idx << ":\n";
        if(done[cur][cur_idx]) {
            continue;
        }
        done[cur][cur_idx] = true;
        if(cur_steps >= n) {
            continue;
        }
        for(pii nei : graph[cur]) {
            int nei_idx = cur_steps + 1 - steps[nei.fi];
            if(nei_idx > k) {
                continue;
            }
            bitset<1 + maxn> tmp = (bitset<1 + maxn>(nei.se) << cur_steps);
            int carry = 0;
            for(int i = 0; i <= maxn; i++) {
                int sum = dist[cur][cur_idx].bs[i] + tmp[i] + carry;
                carry = sum / 2;
                tmp[i] = sum % 2;
            }
            distance neidist = distance(tmp);
            // distance neidist = distance(dist[cur][cur_idx].bs + (bitset<1 + maxn>(nei.se) << cur_steps));
            // reversed
            if(dist[nei.fi][nei_idx] < neidist) {
                dist[nei.fi][nei_idx] = neidist;
                q.push(mp(neidist, mp(nei.fi, cur_steps + 1)));
            }
        }
    }
    /*for(int i = 1; i <= n; i++) {
        for(int j = 0; j <= k; j++) {
            if(dist[i][j].bs[maxn] == 0) {
                dist[i][j].print();
            } else {
                cout << "-1";
            }
            cout << " ";
        }
        cout << "\n";
    }*/
    for(int i = 2; i <= n; i++) {
        distance ans_bs(-1);
        for(int j = 0; j <= k; j++) {
            ans_bs = max(ans_bs, dist[i][j]);
        }
        int ans = 0;
        int coeff = 1;
        for(int i = 0; i <= maxn; i++) {
            ans += coeff * ans_bs.bs[i];
            ans %= mod;
            coeff = (2 * coeff) % mod;
                    }
        cout << ans % mod << "\n";
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 8ms 9324 KiB
2 Időlimit túllépés 2.099s 7492 KiB
subtask2 8/8
3 Elfogadva 1.059s 11184 KiB
4 Elfogadva 822ms 10864 KiB
5 Elfogadva 810ms 10820 KiB
6 Elfogadva 1.042s 13928 KiB
7 Elfogadva 291ms 10660 KiB
subtask3 15/15
8 Elfogadva 7ms 10320 KiB
9 Elfogadva 8ms 10316 KiB
10 Elfogadva 8ms 10324 KiB
11 Elfogadva 8ms 10592 KiB
12 Elfogadva 9ms 10808 KiB
13 Elfogadva 8ms 10972 KiB
14 Elfogadva 8ms 10944 KiB
15 Elfogadva 8ms 10912 KiB
16 Elfogadva 8ms 11052 KiB
17 Elfogadva 7ms 11176 KiB
18 Elfogadva 7ms 11396 KiB
subtask4 0/34
19 Időlimit túllépés 2.062s 15392 KiB
20 Elfogadva 1.776s 13944 KiB
21 Elfogadva 1.809s 13948 KiB
22 Időlimit túllépés 2s 15548 KiB
23 Időlimit túllépés 2.01s 15652 KiB
24 Elfogadva 1.5s 12800 KiB
25 Időlimit túllépés 2.059s 10976 KiB
26 Időlimit túllépés 2.058s 11032 KiB
27 Elfogadva 1.264s 12076 KiB
28 Elfogadva 657ms 12292 KiB
29 Elfogadva 615ms 12176 KiB
30 Elfogadva 437ms 12240 KiB
31 Elfogadva 644ms 12248 KiB
32 Elfogadva 830ms 12376 KiB
33 Elfogadva 833ms 12380 KiB
subtask5 0/21
34 Elfogadva 218ms 11876 KiB
35 Hibás válasz 460ms 12724 KiB
36 Hibás válasz 493ms 14288 KiB
37 Hibás válasz 497ms 14028 KiB
38 Hibás válasz 481ms 14160 KiB
39 Hibás válasz 479ms 14148 KiB
40 Hibás válasz 513ms 12444 KiB
41 Hibás válasz 513ms 12316 KiB
42 Elfogadva 108ms 12232 KiB
43 Elfogadva 93ms 12224 KiB
44 Elfogadva 93ms 12224 KiB
45 Elfogadva 94ms 12220 KiB
46 Elfogadva 104ms 12336 KiB
47 Hibás válasz 101ms 12336 KiB
48 Elfogadva 146ms 12520 KiB
49 Elfogadva 149ms 12512 KiB
subtask6 0/22
50 Hibás válasz 1.493s 13520 KiB
51 Időlimit túllépés 2.013s 16364 KiB
52 Időlimit túllépés 2.053s 11700 KiB
53 Időlimit túllépés 2.065s 11676 KiB
54 Időlimit túllépés 2.049s 19700 KiB
55 Időlimit túllépés 2.046s 11820 KiB
56 Hibás válasz 1.391s 12876 KiB
57 Hibás válasz 1.394s 13068 KiB
58 Elfogadva 175ms 12716 KiB
59 Elfogadva 671ms 13024 KiB
60 Elfogadva 643ms 13024 KiB
61 Elfogadva 610ms 13024 KiB
62 Hibás válasz 555ms 12900 KiB
63 Hibás válasz 688ms 13048 KiB
64 Elfogadva 837ms 13152 KiB
65 Elfogadva 834ms 13168 KiB
66 Elfogadva 694ms 13100 KiB