153852025-02-19 10:25:09AblablablaAutópálya inflációcpp17Hibás válasz 15/100108ms71656 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)));
                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álasz92ms71476 KiB
subtask20/8
3Elfogadva75ms71220 KiB
4Hibás válasz86ms71220 KiB
5Hibás válasz74ms71368 KiB
6Elfogadva86ms71476 KiB
7Hibás válasz74ms71224 KiB
subtask315/15
8Elfogadva1ms508 KiB
9Elfogadva1ms508 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms508 KiB
12Elfogadva1ms316 KiB
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Elfogadva1ms316 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms316 KiB
subtask40/34
19Elfogadva92ms71512 KiB
20Hibás válasz103ms71656 KiB
21Hibás válasz103ms71652 KiB
22Elfogadva92ms71564 KiB
23Elfogadva104ms71484 KiB
24Hibás válasz104ms71420 KiB
25Elfogadva92ms71652 KiB
26Elfogadva90ms71444 KiB
27Hibás válasz89ms71328 KiB
28Hibás válasz72ms71124 KiB
29Hibás válasz86ms71028 KiB
30Hibás válasz74ms62260 KiB
31Hibás válasz71ms70708 KiB
32Hibás válasz87ms71036 KiB
33Hibás válasz100ms70968 KiB
subtask50/21
34Hibás válasz4ms2360 KiB
35Hibás válasz7ms2356 KiB
36Hibás válasz7ms2356 KiB
37Hibás válasz7ms2580 KiB
38Elfogadva7ms2572 KiB
39Elfogadva7ms2448 KiB
40Hibás válasz7ms2356 KiB
41Hibás válasz7ms2336 KiB
42Hibás válasz4ms2360 KiB
43Hibás válasz3ms2356 KiB
44Hibás válasz4ms2356 KiB
45Hibás válasz3ms2356 KiB
46Hibás válasz4ms2356 KiB
47Hibás válasz3ms2188 KiB
48Hibás válasz4ms2356 KiB
49Hibás válasz4ms2356 KiB
subtask60/22
50Hibás válasz90ms71476 KiB
51Hibás válasz105ms71548 KiB
52Hibás válasz104ms71516 KiB
53Hibás válasz93ms71476 KiB
54Elfogadva92ms71484 KiB
55Elfogadva104ms71572 KiB
56Hibás válasz96ms71476 KiB
57Hibás válasz108ms71416 KiB
58Hibás válasz9ms8256 KiB
59Hibás válasz74ms71040 KiB
60Hibás válasz86ms71220 KiB
61Hibás válasz86ms71276 KiB
62Hibás válasz71ms69700 KiB
63Hibás válasz72ms70248 KiB
64Hibás válasz90ms70908 KiB
65Hibás válasz103ms70836 KiB
66Hibás válasz101ms71256 KiB