Advertisement
sr_pope

X41530 - Forest

Dec 3rd, 2018
773
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <queue>
  4. using namespace std;
  5.  
  6. void dfs(const vector<vector<int> >& g, vector<bool>& visited, int u, bool& forest, int ant, int antant){
  7.     if(!visited[u]){
  8.         visited[u] = true;
  9.         for(int i = 0; i < g[u].size(); ++i){
  10.             dfs(g,visited,g[u][i], forest, u, ant);
  11.         }
  12.     }
  13.     else if(visited[u] && u != antant){
  14.         forest = false;
  15.     }
  16. }
  17.  
  18. void dfs_1(const vector<vector<int> >& g, vector<bool>& visited, int& count,bool& forest){
  19.     for(int i = 0; i < g.size(); ++i){
  20.         if(!visited[i]){
  21.             ++count;
  22.             dfs(g,visited,i,forest, i, -1);
  23.         }
  24.     }
  25. }
  26.  
  27. int main(){
  28.     int n,m;
  29.     while(cin >> n >> m){
  30.         vector<vector<int> > g(n);
  31.         for(int i = 0; i < m; ++i){
  32.             int x,y;
  33.             cin >> x >> y;
  34.             g[x].push_back(y);
  35.             g[y].push_back(x);
  36.         }
  37.         vector<bool> visited(n,false);
  38.         bool forest = true;
  39.         int count = 0;
  40.         dfs_1(g,visited,count,forest);
  41.         if (!forest) cout << "no" << endl;
  42.         else cout << count << endl;
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement