fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int n,i,visited[1001]={0},matching[1001],length,s,cycles[100001],k=0;
  8. cin>>n;
  9. for (i=1;i<=n;i++) cin>>matching[i];
  10. for (i=1;i<=n;i++) {
  11. if (visited[i]==0) {
  12. //cout<<i<<" ";
  13. length++;s=matching[i];visited[i]=1;
  14. //cout<<s<<" ";
  15. while (s!=i) {
  16. visited[s]=1;
  17. //length++;
  18. s=matching[s];
  19. //cout<<s<<" ";
  20. }
  21. //cout<<endl;
  22. }
  23.  
  24. }
  25. for (i=1;i<=1000;i++) visited[i]=0;
  26. cout<<length<<endl;
  27. for (i=1;i<=n;i++) {
  28. if (visited[i]==0) {
  29. cout<<i<<" ";
  30. length++;s=matching[i];visited[i]=1;
  31. //cout<<s<<" ";
  32. while (s!=i) {
  33. visited[s]=1;
  34. //length++;
  35. cout<<s<<" ";
  36. s=matching[s];
  37. }
  38. cout<<s<<" ";
  39. cout<<endl;
  40. }
  41.  
  42. }
  43. return 0;
  44. }
Success #stdin #stdout 0s 3300KB
stdin
8
2 4 5 1 7 6 3 8
stdout
134514644
1 2 4 1 
3 5 7 3 
6 6 
8 8