Source code for submission s697

fr.cpp

  1. #include <vector>
  2. #include <list>
  3. #include <map>
  4. #include <set>
  5. #include <algorithm>
  6. #include <numeric>
  7. #include <utility>
  8. #include <sstream>
  9. #include <iostream>
  10. #include <iomanip>
  11. #include <cstdio>
  12. #include <cmath>
  13. #include <cstdlib>
  14. #include <string>
  15.  
  16. #define vi vector <int>
  17. #define vl vector <long long>
  18. #define vpii vector <pair <int,int> >
  19. #define mp(x,y) make_pair(x,y)
  20. #define all(x) (x).begin(),(x).end()
  21. #define sz(x) (int)(x).size()
  22. #define FOR(i,n) for(ll i=0;i<int(n);i++)
  23. #define READ(v,n) {FOR(i,n){ll x;cin>>x;v.pb(x);} }
  24. #define gmin(a,b) {if (b<a) a=b;}
  25. #define gmax(a,b) {if (b>a) a=b;}
  26. #define pb push_back
  27. #define ppb pop_back
  28. typedef long long ll;
  29. typedef unsigned long long ull;
  30. using namespace std;
  31.  
  32. int n, c;
  33. int a[1000000];
  34.  
  35. int opt(int x, int from) {
  36. int v= 0;
  37. bool leaf = true;
  38. for (int i= 0; i < n; ++i) {
  39. if (i != from) {
  40. if (a[x*n + i] > 0){
  41. leaf = false;
  42. v += opt(i, x);
  43. }
  44. }
  45. }
  46. if (from > -1) {
  47. if (a[x*n + from] < v) return a[x*n + from];
  48. if (leaf) return a[x*n + from];
  49. }
  50. return v;
  51. }
  52.  
  53. int main(){
  54. int x, y, v;
  55. while (cin >> n>>c){
  56. for (int i= 0; i < n*n; ++i) a[i] = 0;
  57. for (int i = 0; i < n-1; ++i) {
  58. cin >> x>>y>>v;
  59. a[(x-1)*n + (y-1)] = v;
  60. a[(y-1)*n + (x-1)] = v;
  61. }
  62.  
  63. cout << opt(c-1, -1)<<endl;
  64. }
  65.  
  66. return 0;
  67. }
  68.  
  69.  
  70.