Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <map>
- #include <set>
- using namespace std;
- void dfs(int start, map<int, set<int>> &adjSets, map<int, bool> &used) {
- used[start] = true;
- for (auto neighbour: adjSets[start]) {
- if (!used[neighbour]) {
- dfs(neighbour, adjSets, used);
- }
- }
- }
- int main() {
- ifstream file("input.txt");
- int n;
- file >> n;
- map<int, set<int>> adjSets;
- map<int, bool> used;
- for (int i = 0; i < n; i++) {
- int value;
- file >> value;
- adjSets[i].insert(value-1);
- adjSets[value-1].insert(i);
- used[i] = false;
- }
- int result = 0;
- for (int i = 0; i < n; i++) {
- if (!used[i]) {
- dfs(i, adjSets, used);
- result += 1;
- }
- }
- cout << result << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement