Source code for submission s968

Go to diff to previous submission

fr.cpp

  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <vector>
  4. #include <queue>
  5. using namespace std;
  6.  
  7. struct TNode{
  8. int m_Number;
  9. int m_Effort;
  10. vector<TNode *> m_Child;
  11. TNode(int number, int effort){
  12. m_Number = number;
  13. m_Effort = effort;
  14. }
  15. };
  16.  
  17. TNode * SearchNode(int number, TNode * node){
  18. if(node->m_Number == number){
  19. return node;
  20. }
  21. if(node->m_Child.empty()){
  22. return NULL;
  23. }
  24. TNode * child;
  25. for(vector<TNode*>::iterator it = node->m_Child.begin(); it != node->m_Child.end(); ++it){
  26. child = SearchNode(number, *it);
  27. if(child){
  28. break;
  29. }
  30. }
  31. return child;
  32. }
  33.  
  34. int GetMin(TNode * node){
  35. if(node->m_Child.empty()){
  36. return node->m_Effort;
  37. }
  38. int minChildren = 0;
  39. for(vector<TNode*>::iterator it = node->m_Child.begin(); it != node->m_Child.end(); ++it){
  40. minChildren += GetMin((*it));
  41. }
  42. if(minChildren < (node->m_Effort)){
  43. return minChildren;
  44. }
  45. else{
  46. return node->m_Effort;
  47. }
  48. }
  49.  
  50. int main(void){
  51. int numOfNodes, central;
  52. while(cin >> numOfNodes >> central){
  53. TNode * root = new TNode(central, 0);
  54. /*for(int i = 1; i < numOfNodes; i++){
  55. int number1, number2, effort;
  56. TNode * node1, * node2;
  57. cin >> number1 >> number2 >> effort;
  58. node1 = SearchNode(number1, root);
  59. node2 = SearchNode(number2, root);
  60. if(node1){
  61. node2 = new TNode(number2, effort);
  62. node1->m_Child.push_back(node2);
  63. }
  64. else{
  65. node1 = new TNode(number1, effort);
  66. node2->m_Child.push_back(node1);
  67. }
  68. }*/
  69. int ** table = new int * [numOfNodes];
  70. for(int i = 0; i < numOfNodes; i++){
  71. table[i] = new int [numOfNodes];
  72. for(int j = 0; j < numOfNodes; j++){
  73. table[i][j] = -1;
  74. }
  75. }
  76. for(int i = 1; i < numOfNodes; i++){
  77. int num1, num2, effort;
  78. cin >> num1 >> num2 >> effort;
  79. table[num1-1][num2-1] = effort;
  80. table[num2-1][num1-1] = effort;
  81. }
  82. queue<int> nodes;
  83. nodes.push(central);
  84. while(!nodes.empty()){
  85. int i = nodes.front();
  86. TNode * node = SearchNode(i, root);
  87. for(int j = 0; j < numOfNodes; j++){
  88. int effort = table[i-1][j];
  89. table[j][i-1] = -1;
  90. if(effort > -1){
  91. node->m_Child.push_back(new TNode(j+1, effort));
  92. nodes.push(j+1);
  93. }
  94. }
  95. nodes.pop();
  96. }
  97. int min = 0;
  98. for(vector<TNode*>::iterator it = root->m_Child.begin(); it != root->m_Child.end(); ++it){
  99. min += GetMin(*it);
  100. }
  101. cout << min << endl;
  102. }
  103. return 0;
  104. }
  105.  
  106.  
  107.  
  108.  

Diff to submission s780

fr.cpp

--- c5.s780.cteam009.fr.cpp.0.fr.cpp
+++ c5.s968.cteam009.fr.cpp.0.fr.cpp
@@ -2,4 +2,5 @@
 #include <iostream>
 #include <vector>
+#include <queue>
 using namespace std;
 
@@ -51,5 +52,5 @@
         while(cin >> numOfNodes >> central){
                 TNode * root = new TNode(central, 0);
-                for(int i = 1; i < numOfNodes; i++){
+                /*for(int i = 1; i < numOfNodes; i++){
                         int number1, number2, effort;
                         TNode * node1, * node2;
@@ -65,5 +66,33 @@
                                 node2->m_Child.push_back(node1);
                         }
-                }       
+                }*/
+                int ** table = new int * [numOfNodes];
+                for(int i = 0; i < numOfNodes; i++){
+                        table[i] = new int [numOfNodes];
+                        for(int j = 0; j < numOfNodes; j++){
+                                table[i][j] = -1;
+                        }
+                }
+                for(int i = 1; i < numOfNodes; i++){
+                        int num1, num2, effort;
+                        cin >> num1 >> num2 >> effort;                  
+                        table[num1-1][num2-1] = effort;
+                        table[num2-1][num1-1] = effort;
+                }
+                queue<int> nodes;
+                nodes.push(central);
+                while(!nodes.empty()){
+                        int i = nodes.front();
+                        TNode * node = SearchNode(i, root);
+                        for(int j = 0; j < numOfNodes; j++){
+                                int effort = table[i-1][j];
+                                table[j][i-1] = -1;
+                                if(effort > -1){
+                                        node->m_Child.push_back(new TNode(j+1, effort));
+                                        nodes.push(j+1);
+                                }
+                        }
+                        nodes.pop();
+                }
                 int min = 0;
                 for(vector<TNode*>::iterator it = root->m_Child.begin(); it != root->m_Child.end(); ++it){