Source code for submission s754

fr.cpp

  1. //
  2. // File: fs.cc
  3. // Author: cteam008
  4. //
  5. // Created on October 19, 2013, 10:50 AM
  6. //
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <iostream>
  11. #include <vector>
  12. #include <queue>
  13.  
  14. using namespace std;
  15.  
  16. struct node {
  17. unsigned int effort;
  18. vector<int> children;
  19. };
  20.  
  21. struct edge {
  22. int u,v,w;
  23. };
  24.  
  25. vector<node> nodes;
  26.  
  27. int getMinEffort(int node) {
  28. if (nodes[node].children.empty()) return nodes[node].effort;
  29. unsigned int minChildren = 0;
  30. for (int i = 0; i < nodes[node].children.size(); i++) {
  31. minChildren += getMinEffort(nodes[node].children[i]);
  32. if (minChildren >= nodes[node].effort) {
  33. return nodes[node].effort;
  34. }
  35. }
  36. return minChildren;
  37. }
  38. //
  39. //
  40. //
  41. int main(int argc, char** argv) {
  42. int n,c,u,v,w;
  43. while (cin >> n >> c) {
  44. queue<edge> edges;
  45. nodes.clear();
  46. for (int i = 0; i <= n; i++) {
  47. node n;
  48. n.effort = 0;
  49. nodes.push_back(n);
  50. }
  51. nodes[c].effort = -1;
  52. for (int i = 1; i < n; i++) {
  53. edge e;
  54. cin >> e.u >> e.v >> e.w;
  55. if (e.u == c) {
  56. nodes[c].children.push_back(e.v);
  57. nodes[e.v].effort = e.w;
  58. } else if (e.v == c) {
  59. nodes[c].children.push_back(e.u);
  60. nodes[e.u].effort = e.w;
  61. } else {
  62. edges.push(e);
  63. }
  64. }
  65. while (!edges.empty()) {
  66. edge e = edges.front();
  67. edges.pop();
  68. if (nodes[e.v].effort != 0) {
  69. nodes[e.v].children.push_back(e.u);
  70. nodes[e.u].effort = e.w;
  71. } else if (nodes[e.u].effort != 0) {
  72. nodes[e.u].children.push_back(e.v);
  73. nodes[e.v].effort = e.w;
  74. } else {
  75. edges.push(e);
  76. }
  77. }
  78. cout << getMinEffort(c) << endl;
  79. }
  80. return (EXIT_SUCCESS);
  81. }
  82.