Source code for submission s724

fr.cpp

  1. #include<iostream>
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<ctype.h>
  6. #include<math.h>
  7.  
  8. #include<vector>
  9. #include<queue>
  10.  
  11. using namespace std;
  12.  
  13. #define FOR(i,a,b) for(int i=a; i<=b; i++)
  14.  
  15. #define PII pair<int, int>
  16. #define MP make_pair
  17. #define PB push_back
  18.  
  19. #define SIZE(s) ((int)(s).size())
  20.  
  21. #define ll long long
  22. #define INF 987654321
  23. #define MAX 1047
  24. #define fi first
  25. #define se second
  26.  
  27. vector< PII > G[MAX];
  28. int N, V;
  29.  
  30. int visits[MAX];
  31. int values[MAX];
  32.  
  33. PII find(int v)
  34. {
  35. FOR(i,0,SIZE(G[v])-1)
  36. if ( !visits[ G[v][i].fi ])
  37. return G[v][i];
  38. return MP(0,0);
  39. }
  40.  
  41. vector<int> D[MAX];
  42. int max_depth;
  43.  
  44. void dfs(int v, int depth)
  45. {
  46. max_depth = max(depth, max_depth);
  47. D[depth].PB(v);
  48. visits[v] = true;
  49. FOR(i,0,SIZE(G[v])-1)
  50. if (!visits[ G[v][i].fi ])
  51. dfs( G[v][i].fi , depth+1);
  52. }
  53.  
  54.  
  55. int main()
  56. {
  57. int a, b, c;
  58. while(scanf("%d %d", &N, &V) == 2)
  59. {
  60. V--;
  61. FOR(i,0,N-1) G[i].clear();
  62. FOR(k,1,N-1)
  63. {
  64. scanf("%d %d %d",&a, &b, &c);
  65. a--; b--;
  66. G[a].PB( MP(b, c) );
  67. G[b].PB( MP(a, c) );
  68. }
  69.  
  70.  
  71. max_depth = 0;
  72. FOR(i,0,N) D[i].clear();
  73. FOR(i,0,N-1) visits[i]= false;
  74. dfs(V,0);
  75. /*
  76. FOR(d,0,max_depth)
  77. {
  78. cout << "d: " << d << " - ";
  79. FOR(i,0,SIZE(D[d])-1)
  80. cout << D[d][i]+1 << " ";
  81. cout << endl;
  82. }
  83. */
  84. FOR(i,0,N-1)
  85. values[i] = 0;
  86.  
  87. FOR(i,0,N-1)
  88. if (SIZE(G[i]) == 1 && i != V)
  89. values[i] = INF;
  90.  
  91. FOR(i,0,N-1) visits[i] = false;
  92. for(int d = max_depth; d>=0; d--)
  93. FOR(i,0,SIZE(D[d])-1)
  94. {
  95. int v = D[d][i];
  96. visits[v] = true;
  97. PII parent = find(v);
  98. values[parent.fi ] += min( values[v], parent.se );
  99.  
  100.  
  101. // cout << "som na " << v+1 << endl;
  102. // cout << "davam do " << parent.fi+1 << " - " << min( values[v], parent.se ) << endl;
  103. }
  104.  
  105. // FOR(i,0,N-1) cout << i+1 << ". " << values[i] << endl;
  106.  
  107. printf("%d\n", values[V] );
  108. }
  109. return 0;
  110. }
  111.  
  112.