40922023-03-13 21:30:05Szin AttilaMágikus sorozatcpp14Elfogadva 100/100193ms96612 KiB
#include <bits/stdc++.h>
using namespace std;
#define InTheNameOfGod ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
using ll = long long;

const int maxN = 2e5 + 5;
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;

int main() {
   InTheNameOfGod;

    int n;
    cin >> n;

    vector<int> v(n);
    for(int &i : v) cin >> i;

    vector<vector<int> > g(n+1);
    vector<int> be(n, 0), mo(n, -1);

    for(int i = 1; i < n; i++) {
        g[v[i]].push_back(i+v[i]);
    }

    priority_queue<pair<int, int> > q;
    for(int i = 0; i < n; i++) {
        q.push({-1, -i});
    }

    vector<set<int> > no(n);

    while(!q.empty()) {
        pair<int, int> cur = q.top();
        q.pop();

        int x = -cur.second, val = -cur.first;

        if(no[x].find(val) != no[x].end() || mo[x] != -1) continue;
        mo[x] = val;

        for(int sz : g[x]) {
            if(mo[sz] == -1) {
                no[sz].insert(val);
                q.push({-val-1, -sz});
            }
        }
    }

    for(int i : mo) cout << i << ' ';

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1700 KiB
2Elfogadva8ms4848 KiB
subtask215/15
3Elfogadva4ms2948 KiB
4Elfogadva4ms3160 KiB
5Elfogadva4ms3372 KiB
subtask315/15
6Elfogadva3ms2860 KiB
7Elfogadva3ms3096 KiB
8Elfogadva2ms3012 KiB
9Elfogadva2ms3004 KiB
10Elfogadva3ms3136 KiB
subtask430/30
11Elfogadva4ms4156 KiB
12Elfogadva4ms4392 KiB
13Elfogadva4ms4320 KiB
14Elfogadva4ms4200 KiB
subtask540/40
15Elfogadva180ms92712 KiB
16Elfogadva182ms92644 KiB
17Elfogadva165ms75036 KiB
18Elfogadva136ms64116 KiB
19Elfogadva144ms63876 KiB
20Elfogadva156ms73312 KiB
21Elfogadva165ms73480 KiB
22Elfogadva165ms73468 KiB
23Elfogadva165ms73900 KiB
24Elfogadva193ms87428 KiB
25Elfogadva171ms73748 KiB
26Elfogadva160ms74320 KiB
27Elfogadva180ms80144 KiB
28Elfogadva179ms94948 KiB
29Elfogadva179ms94176 KiB
30Elfogadva130ms77468 KiB
31Elfogadva158ms85280 KiB
32Elfogadva164ms96612 KiB