7662022-01-09 18:48:42Szin AttilaTitkos sorozatcpp14Elfogadva 40/4045ms26872 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;

vector<vector<int> > g(maxN);
vector<int> sorrend, mo;


int main() {

#pragma region
#ifndef ONLINE_JUDGE
   freopen("../input.txt", "r", stdin);
   freopen("../output.txt", "w", stdout);
#endif

   InTheNameOfGod;
#pragma endregion
    
    int n;
    cin >> n;
    vector<int> v(n), fugges(n, 0);
    mo.resize(n, -1);
    for(int i = 0; i < n; i++) {
        cin >> v[i];
    }
    int curr = n;

    queue<int> sor;
    for(int i = 0; i < n; i++) {
        if(v[i] == -1) {
            mo[i] = curr--;
            sor.push(i+1);
        }
        else {
            g[v[i]].push_back(i+1);
            fugges[i+1]++;
        }
    }

    while(!sor.empty()) {
        int curr = sor.front();
		sor.pop();

		if(v[curr-1] != -1) sorrend.push_back(curr-1);
        for(int sz : g[curr]) {
            if(--fugges[sz] == 0) {
                sor.push(sz);
            }
        }  
    }
    reverse(sorrend.begin(), sorrend.end());
    for(int i = 0; i < sorrend.size(); i++) {
        mo[sorrend[i]] = i+1;
    }

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

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/07ms10924 KiB
2Elfogadva0/023ms15028 KiB
3Elfogadva1/17ms11188 KiB
4Elfogadva1/16ms11188 KiB
5Elfogadva2/26ms11196 KiB
6Elfogadva1/16ms11328 KiB
7Elfogadva1/18ms11328 KiB
8Elfogadva2/26ms11332 KiB
9Elfogadva2/239ms18864 KiB
10Elfogadva2/239ms19448 KiB
11Elfogadva2/237ms20020 KiB
12Elfogadva2/237ms20612 KiB
13Elfogadva2/237ms21204 KiB
14Elfogadva2/245ms21816 KiB
15Elfogadva2/237ms22592 KiB
16Elfogadva3/335ms23208 KiB
17Elfogadva3/337ms23940 KiB
18Elfogadva3/339ms24576 KiB
19Elfogadva3/335ms25380 KiB
20Elfogadva3/335ms26872 KiB
21Elfogadva1/134ms25596 KiB
22Elfogadva1/134ms26080 KiB
23Elfogadva1/134ms26456 KiB