Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.48 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. //#include <cstdlib>
  3. //#include<iostream>
  4. //#include<fstream>
  5. //#include<vector>
  6. //#include<algorithm>
  7.  
  8. using namespace std;
  9.  
  10. void dfs(int vertex, vector<vector<int>>& adjlist, int* vertices, int numberGroups)
  11. {
  12.     if (vertices[vertex] != -1)
  13.     {
  14.         return;
  15.     }
  16.    
  17.     vertices[vertex] = numberGroups;
  18.     for (int i = 0; i < adjlist[vertex].size(); i++)
  19.     {
  20.         dfs(adjlist[vertex][i], adjlist, vertices, numberGroups);
  21.     }
  22. }
  23.  
  24. /*
  25.  * Complete the componentsInGraph function below.
  26.  */
  27. vector<int> componentsInGraph(int n, vector<vector<int>>& gb)
  28. {
  29.     std::cout << "Vliza" << std::endl;
  30.    
  31.     vector<vector<int>> adjList;
  32.     adjList.resize(2 * n);
  33.    
  34.     std::cout << "Sled reserve" << std::endl;
  35.    
  36.     for (int i = 0; i < adjList.size(); i++)
  37.     {
  38.         adjList[i] = vector<int>();
  39.     }
  40.    
  41.     std::cout << "Sled for-a" << std::endl;
  42.    
  43.     for (int i = 0; i < gb.size(); i++)
  44.     {
  45.         adjList[gb[i][0] - 1].push_back(gb[i][1] - 1);
  46.         adjList[gb[i][1] - 1].push_back(gb[i][0] - 1);
  47.     }
  48.    
  49.     for (int i = 0; i < adjList.size(); i++)
  50.     {
  51.         std::cout << i << " ";
  52.         for (int j = 0; j < adjList[i].size(); j++)
  53.         {
  54.             std::cout << adjList[i][j] << " ";
  55.         }
  56.         std::cout << std::endl;
  57.     }
  58.  
  59.     int* vertices = new int[adjList.size()];
  60.     for (int i = 0; i < adjList.size(); i++)
  61.     {
  62.         if(adjList[i].empty())
  63.         {
  64.             vertices[i] = -2;
  65.         }
  66.         else
  67.         {
  68.             vertices[i] = -1;
  69.         }
  70.     }
  71.    
  72.     int numberGroups = 0;
  73.     for (int i = 0; i < adjList.size(); i++)
  74.     {
  75.         if (vertices[i] == -1)
  76.         {
  77.             dfs(i, adjList, vertices, numberGroups);
  78.             ++numberGroups;
  79.         }
  80.     }
  81.    
  82.     std::cout << numberGroups << std::endl;
  83.    
  84.     int* groups = new int[numberGroups];
  85.     for (int i = 0; i < numberGroups; i++)
  86.     {
  87.         groups[i] = 0;
  88.     }
  89.    
  90.     for (int i = 0; i < adjList.size(); i++)
  91.     {
  92.         //how many nodes are there in each group
  93.         groups[vertices[i]]++;
  94.     }
  95.    
  96.     /*for (int i = 0; i < numberGroups; i++)
  97.     {
  98.         if (groups[i] == 1)
  99.         {
  100.             groups[i] = 0;
  101.         }
  102.     }*/
  103.    
  104.     int min = groups[0];
  105.     int max = groups[0];
  106.     for (int i = 0; i < numberGroups; i++)
  107.     {
  108.         if (groups[i] < min)
  109.         {
  110.             min = groups[i];
  111.         }
  112.        
  113.         if (groups[i] > max)
  114.         {
  115.             max = groups[i];
  116.         }
  117.     }
  118.    
  119.     vector<int> results;
  120.  
  121.     results.push_back(min);
  122.     results.push_back(max);
  123.    
  124.     return results;
  125. }
  126.  
  127. int main()
  128. {
  129.     ofstream fout(getenv("OUTPUT_PATH"));
  130.  
  131.     int n;
  132.     cin >> n;
  133.     cin.ignore(numeric_limits<streamsize>::max(), '\n');
  134.  
  135.     vector<vector<int>> gb(n);
  136.    
  137.     for (int gb_row_itr = 0; gb_row_itr < n; gb_row_itr++)
  138.     {
  139.         gb[gb_row_itr].resize(2);
  140.  
  141.         for (int gb_column_itr = 0; gb_column_itr < 2; gb_column_itr++)
  142.         {
  143.             cin >> gb[gb_row_itr][gb_column_itr];
  144.         }
  145.  
  146.         cin.ignore(numeric_limits<streamsize>::max(), '\n');
  147.     }
  148.  
  149.     vector<int> result = componentsInGraph(n, gb);
  150.  
  151.     for (int SPACE_itr = 0; SPACE_itr < result.size(); SPACE_itr++)
  152.     {
  153.         fout << result[SPACE_itr];
  154.  
  155.         if (SPACE_itr != result.size() - 1)
  156.         {
  157.             fout << " ";
  158.         }
  159.     }
  160.  
  161.     fout << "\n";
  162.  
  163.     fout.close();
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement