Source code for submission s930

rose.cpp

  1. #include <cstdlib>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <climits>
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10. struct Node{
  11. Node(){visited=false;}
  12. bool visited;
  13. vector<int> edges;
  14. vector<int> egeval;
  15. };
  16.  
  17. int n,cn;
  18. vector<Node> nodes;
  19.  
  20. int solve(int n, int eval){
  21. //cout << n << " " << eval << endl;
  22. nodes[n].visited = true;
  23. int alt = 0;
  24. int cc = 0;
  25. for( int i = 0; i < nodes[n].edges.size(); i++ ){
  26. if(!nodes[nodes[n].edges[i]].visited){
  27. alt+=solve(nodes[n].edges[i],nodes[n].egeval[i]);
  28. cc++;}
  29. }
  30. if(!cc)return eval;
  31. //cout << "alt " << alt << endl;
  32. return min(eval,alt);
  33. }
  34.  
  35. int main(int argc, char * argv[]){
  36. int a,b,c;
  37. while(scanf("%d %d",&n,&cn)==2){
  38. nodes.resize(0);
  39. nodes.resize(n);
  40. cn--;
  41. for( int i = 0; i < (n-1); i++ ){
  42. scanf("%d%d%d",&a,&b,&c);
  43. a--;b--;
  44. nodes[a].edges.push_back(b);
  45. nodes[b].edges.push_back(a);
  46. nodes[a].egeval.push_back(c);
  47. nodes[b].egeval.push_back(c);
  48. }
  49. printf("%d\n",solve(cn,INT_MAX));
  50. }
  51. return 0;
  52. }
  53.