Source code for submission s561

fr.cpp

  1. #include <algorithm>
  2. #include <cctype>
  3. #include <cmath>
  4. #include <complex>
  5. #include <cstdio>
  6. #include <cstring>
  7. #include <iomanip>
  8. #include <iostream>
  9. #include <list>
  10. #include <map>
  11. #include <queue>
  12. #include <set>
  13. #include <sstream>
  14. #include <stack>
  15. #include <string>
  16. #include <utility>
  17. #include <vector>
  18. using namespace std;
  19.  
  20. #define DEBUG(x) cout << ">>> " << #x << " : " << x << endl;
  21. #define REP(i,a) for (int i = 0; i < (a); ++i)
  22. #define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
  23. #define FORD(i,a,b) for (int i = (a); i >= (b); --i)
  24. inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
  25.  
  26. const int INF = 1<<29;
  27. typedef long long ll;
  28. ///////////////////////////////////////////////////////////////////////////
  29.  
  30. const int MAX = 1024;
  31. int N, root;
  32. vector<pair<int, int> > graph[MAX];
  33.  
  34. int go(int node, int parent)
  35. {
  36. int up = 0, sum = 0;
  37. REP(i, graph[node].size())
  38. {
  39. if (graph[node][i].first == parent)
  40. up = graph[node][i].second;
  41. else
  42. sum += go(graph[node][i].first, node);
  43. }
  44. if (up == 0) return sum;
  45. if (sum == 0) return up;
  46. return min(up, sum);
  47. }
  48.  
  49. int main()
  50. {
  51. while (scanf("%d%d", &N, &root) == 2)
  52. {
  53. --root;
  54. REP(i, N) graph[i].clear();
  55. REP(i, N-1)
  56. {
  57. int a, b, c;
  58. scanf("%d%d%d", &a, &b,&c);
  59. --a;
  60. --b;
  61. graph[a].push_back(make_pair(b, c));
  62. graph[b].push_back(make_pair(a, c));
  63. }
  64. printf("%d\n", go(root, -1));
  65. }
  66.  
  67. return 0;
  68. }