Source code for submission s661

fr.cpp

  1. #include <iostream>
  2. #include <cctype>
  3. #include <cmath>
  4. #include <complex>
  5. #include <cstdio>
  6. #include <string>
  7. #include <list>
  8. #include <map>
  9. #include <queue>
  10. #include <set>
  11. #include <sstream>
  12. #include <stack>
  13. #include <utility>
  14. #include <vector>
  15.  
  16. using namespace std;
  17.  
  18. #define DEBUG(x) cout << ">>> " #x << " : " << x << endl;
  19. #define MAX 1E9
  20.  
  21. map< int, vector< pair< int, int > > > edges;
  22.  
  23. int dsp( int v, int weight, int parent ) {
  24. if( edges[v].size() == 1 && edges[v][0].first == parent ) return weight;
  25.  
  26. int sum = 0;
  27. for( size_t i = 0; i < edges[v].size(); i++ ) {
  28. if( edges[v][i].first == parent ) continue;
  29.  
  30. sum += dsp( edges[v][i].first, edges[v][i].second, v );
  31. }
  32.  
  33. return (weight < sum) ? weight : sum;
  34. }
  35.  
  36. int main() {
  37. int n,c;
  38. while( scanf( "%d %d", &n, &c ) == 2 ) {
  39. edges.clear();
  40. for( int i = 1; i < n; i++ ) {
  41. int u,v,w;
  42. scanf( "%d %d %d", &u, &v, &w );
  43.  
  44. edges[u].push_back( pair<int,int>(v,w) );
  45. edges[v].push_back( pair<int,int>(u,w) );
  46. }
  47.  
  48. printf( "%d\n", dsp(c,MAX,-1) );
  49. }
  50.  
  51. return 0;
  52. }
  53.