Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- using namespace std;
- const int MAX = 1e6 + 1;
- int na_cyklu[MAX], tab[MAX], dlugosc_cyklu[MAX], N, odw[MAX], odl[MAX];
- stack < int > stos;
- void DFS(int wie, int pop)
- {
- stos.push(wie);
- cout << wie << "\n";
- odl[wie] = odl[pop] + 1;
- if(odw[tab[wie]] == 1)
- {
- int dl = odl[wie] - odl[tab[wie]] + 1;
- while(stos.top() != tab[wie])
- {
- na_cyklu[stos.top()] = 1;
- dlugosc_cyklu[stos.top()] = 1;
- stos.pop();
- }
- na_cyklu[stos.top()] = 1;
- dlugosc_cyklu[stos.top()] = 1;
- stos.pop();
- }
- else
- {
- DFS(tab[wie], wie);
- odw[wie] = 2;
- }
- }
- int main()
- {
- ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
- cin >> N;
- for(int i = 1; i <= N; ++i)
- {
- cin >> tab[i];
- }
- for(int i = 1; i <= N; ++i)
- {
- if(odw[i] != 2)
- {
- //cout << "\t\t" << i << "\n";
- odw[i] = 1;
- DFS(i, 0);
- }
- }
- for(int i = 1; i <= N; ++i)
- {
- if(na_cyklu[i])
- {
- cout << dlugosc_cyklu[i] << "\n";
- }
- else
- {
- cout << "inf\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement