Advertisement
SeriousDude

Untitled

May 27th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. #include <utility>
  5.  
  6. using namespace std;
  7.  
  8. struct vrcholInfo {
  9. uint32_t id;
  10. string str;
  11. };
  12.  
  13. struct vrcholComparator {
  14. bool operator() (const vrcholInfo& lhs, const vrcholInfo& rhs) const {
  15. return lhs.str.compare(rhs.str) < 0;
  16. }
  17. };
  18.  
  19. set<vrcholInfo, vrcholComparator> strings;
  20. uint32_t* components;
  21. vector<uint32_t>* componentElements;
  22. uint32_t vertexID = 0;
  23.  
  24. auto citajMesto(vrcholInfo &mesto) {
  25. cin >> mesto.str;
  26.  
  27. mesto.id = vertexID;
  28. auto resultPair = strings.insert(mesto);
  29. if (resultPair.second)
  30. ++vertexID;
  31.  
  32. return resultPair;
  33. }
  34.  
  35. void presunComponentList(uint32_t lhs, uint32_t rhs) {
  36. for (uint32_t i = 0; i < componentElements[rhs].size(); ++i) {
  37. components[componentElements[rhs][i]] = lhs;
  38. componentElements[lhs].push_back(componentElements[rhs][i]);
  39. }
  40. }
  41.  
  42. int main() {
  43. uint32_t n;
  44. cin >> n;
  45.  
  46. components = new uint32_t[n];
  47. componentElements = new vector<uint32_t>[n];
  48.  
  49. uint32_t i = 0;
  50. while (i < n) {
  51. components[i] = i;
  52. componentElements[i].push_back(i);
  53. ++i;
  54. }
  55.  
  56. vrcholInfo city1, city2;
  57. while (n--) {
  58. uint32_t city1ID = citajMesto(city1).first->id, city2ID = citajMesto(city2).first->id;
  59.  
  60. if (components[city1ID] == components[city2ID])
  61. cout << "0" << endl;
  62. else {
  63. cout << (componentElements[components[city1ID]].size() * componentElements[components[city2ID]].size()) << endl;
  64.  
  65. if (componentElements[components[city1ID]].size() < componentElements[components[city2ID]].size()) presunComponentList(components[city2ID], components[city1ID]);
  66. else presunComponentList(components[city1ID], components[city2ID]);
  67. }
  68. }
  69. return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement