153892025-02-19 10:50:55AblablablaAutópálya inflációcpp17Hibás válasz 0/100103ms71664 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

typedef pair<ll, ll> pii;

const ll INF = 4e18 + 7;
const ll MOD = 1e9 + 7;

vector<ll> ans;
vector<ll> mely;

struct comp{
    bool operator()(ll a, ll b){
        if(ans[a] == ans[b]){
            return mely[a] > mely[b];
        }
        return ans[a] > ans[b];
    }
};

int main()
{
    ll n, m;
    cin >> n >> m;

    vector<vector<ll>> csucsok(n, vector<ll>()), hossz(n, vector<ll>());
    for(ll i = 0; i < m; i++){
        ll a, b, c;
        cin >> a >> b >> c;
        a--; b--;

        csucsok[a].push_back(b);
        hossz[a].push_back(c);
        csucsok[b].push_back(a);
        hossz[b].push_back(c);
    }

    priority_queue<ll, vector<ll>, comp> bejar;
    ans.assign(n, INF);
    ans[0] = 0;
    bejar.push(0);
    vector<bool> bejart(n);
    vector<vector<ll>> opciok(n, vector<ll>(n + 2, INF));
    opciok[0][1] = 0;
    mely.assign(n, 0);


    while(!bejar.empty()){
        ll akt = bejar.top();
        bejar.pop();

        if(bejart[akt]) continue;

        bejart[akt] = 1;

        for(ll i = 0; i < csucsok[akt].size(); i++){
            ll kovi = csucsok[akt][i];
            ll suly = hossz[akt][i];

            if(bejart[kovi]) continue;

            for(int i = 1; i <= n; i++){
                if(opciok[akt][i] == INF) continue;

                ll tav = (opciok[akt][i] + suly*(1ll << (i - 1))) % MOD;
                opciok[kovi][i + 1] = min(opciok[kovi][i + 1], tav);

                if(ans[kovi] > tav) mely[kovi] = i + 1;
                ans[kovi] = min(ans[kovi], tav);
            }

            bejar.push(kovi);
        }
    }

    for(int i = 1; i < n; i++){
        cout << ans[i] % MOD << "\n";
    }

    /*for(int j = 1; j <= n; j++){
        for(int i = 0; i < n; i++){
            if(opciok[i][j] == INF){
                cout << "-1\t";
            } else{
                cout << opciok[i][j] << "\t";
            }
        }
        cout << "\n";
    }*/
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Hibás válasz100ms71476 KiB
subtask20/8
3Elfogadva71ms71220 KiB
4Hibás válasz85ms71220 KiB
5Hibás válasz86ms71220 KiB
6Elfogadva83ms71376 KiB
7Hibás válasz71ms71220 KiB
subtask30/15
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Hibás válasz1ms508 KiB
12Hibás válasz1ms316 KiB
13Hibás válasz1ms508 KiB
14Hibás válasz1ms508 KiB
15Hibás válasz1ms336 KiB
16Elfogadva1ms524 KiB
17Elfogadva1ms316 KiB
18Hibás válasz1ms316 KiB
subtask40/34
19Elfogadva82ms71552 KiB
20Hibás válasz98ms71604 KiB
21Hibás válasz101ms71664 KiB
22Hibás válasz100ms71544 KiB
23Elfogadva97ms71556 KiB
24Hibás válasz98ms71588 KiB
25Elfogadva83ms71524 KiB
26Elfogadva97ms71536 KiB
27Hibás válasz93ms71400 KiB
28Hibás válasz83ms70968 KiB
29Hibás válasz70ms71220 KiB
30Hibás válasz75ms62188 KiB
31Hibás válasz83ms70708 KiB
32Hibás válasz82ms70976 KiB
33Hibás válasz94ms70992 KiB
subtask50/21
34Hibás válasz4ms2356 KiB
35Hibás válasz7ms2356 KiB
36Hibás válasz7ms2664 KiB
37Hibás válasz7ms2356 KiB
38Hibás válasz7ms2356 KiB
39Hibás válasz7ms2448 KiB
40Hibás válasz7ms2332 KiB
41Hibás válasz7ms2296 KiB
42Hibás válasz4ms2240 KiB
43Hibás válasz4ms2236 KiB
44Hibás válasz3ms2356 KiB
45Hibás válasz4ms2216 KiB
46Hibás válasz4ms2356 KiB
47Hibás válasz4ms2284 KiB
48Hibás válasz4ms2368 KiB
49Hibás válasz4ms2356 KiB
subtask60/22
50Hibás válasz101ms71564 KiB
51Hibás válasz103ms71532 KiB
52Hibás válasz89ms71476 KiB
53Hibás válasz87ms71484 KiB
54Hibás válasz98ms71480 KiB
55Hibás válasz85ms71460 KiB
56Hibás válasz83ms71332 KiB
57Hibás válasz97ms71448 KiB
58Hibás válasz9ms8408 KiB
59Hibás válasz71ms71220 KiB
60Hibás válasz86ms71008 KiB
61Hibás válasz85ms71300 KiB
62Hibás válasz82ms69808 KiB
63Hibás válasz85ms70248 KiB
64Hibás válasz85ms70908 KiB
65Hibás válasz100ms71032 KiB
66Hibás válasz83ms71476 KiB