Source code for submission s842

fr.cpp

  1. #include <iostream>
  2. #include <set>
  3. #include <stdio.h>
  4. #include <utility>
  5. #include <map>
  6. #include <string>
  7. #include <sstream>
  8. #include <algorithm>
  9. #include <vector>
  10. using namespace std;
  11.  
  12. int dfs(const vector<vector<int> > & G, const vector<vector<int> > & eff, int node, int parEff, int parent){
  13. int e = 0;
  14. if(G[node].size() == 1){
  15. return parEff;
  16. }
  17. for(int i=0; i<G[node].size(); ++i){
  18. if(G[node][i] != parent){
  19. e += dfs(G, eff, G[node][i], eff[node][i], node);
  20. }
  21. }
  22. return min(e, parEff);
  23. }
  24.  
  25. int solve(const vector<vector<int> > & G, const vector<vector<int> > & eff, int root){
  26. int e = 0;
  27. for(int i=0; i<G[root].size(); ++i){
  28. e += dfs(G, eff, G[root][i], eff[root][i], root);
  29. }
  30. return e;
  31. }
  32.  
  33.  
  34. int main(){
  35. int n, root;
  36. while(cin >> n >> root){
  37. vector<vector<int> > G(n+1);
  38. vector<vector<int> > eff(n+1);
  39. for(int i=0; i<n-1; ++i){
  40. int u, v, w;
  41. cin >> u >> v >> w;
  42. G[u].push_back(v);
  43. G[v].push_back(u);
  44. eff[u].push_back(w);
  45. eff[v].push_back(w);
  46. }
  47. cout << solve(G, eff, root) << '\n';
  48. }
  49. return 0;
  50. }
  51.