Source code for submission s692

fr.cpp

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <iomanip>
  6. #include <iostream>
  7. #include <limits.h>
  8. #include <map>
  9. #include <queue>
  10. #include <vector>
  11. #include <set>
  12. #include <stack>
  13. #include <bitset>
  14. #include <string>
  15.  
  16. using namespace std;
  17.  
  18. typedef pair<int,int> ii;
  19. typedef vector<int> vi;
  20. typedef vector<ii> vii;
  21. typedef set<int> si;
  22. typedef set<ii> sii;
  23.  
  24. #define MP make_pair
  25. #define PB push_back
  26. #define REP(i,a) for ( int i = 0; i < int(a); i++)
  27. #define FOR(i,a,b) for ( int i = int(a); i<=int(b); i++)
  28. #define FORD(i,a,b) for(int i= int(a); i>=int(b); i--)
  29.  
  30. const int INF = 1<<29;
  31. typedef long long int ll;
  32.  
  33. struct node
  34. {
  35. bool visited;
  36. int parent;
  37. vii adj;
  38. } nodes[1001];
  39.  
  40. int dfs( int v, int cap )
  41. {
  42. //printf("node%d %d\n", v, cap);
  43. nodes[v].visited = true;
  44. int sum = 0;
  45. FOR( i, 0, nodes[v].adj.size( )-1 )
  46. {
  47. if ( !nodes[ nodes[v].adj[i].first ].visited )
  48. sum += dfs( nodes[v].adj[i].first, nodes[v].adj[i].second );
  49. }
  50. if ( sum == 0 )
  51. return cap;
  52. return sum;
  53. }
  54.  
  55. int main()
  56. {
  57. int n, c, u, v, w;
  58. while ( scanf("%d%d", &n, &c) == 2 )
  59. {
  60. FOR( i, 1, n )
  61. {
  62. nodes[i].parent = 0;
  63. nodes[i].visited = false;
  64. nodes[i].adj.clear( );
  65. }
  66. FOR( i, 1, n-1 )
  67. {
  68. scanf("%d%d%d", &u, &v, &w);
  69. nodes[u].adj.PB( MP( v, w ) );
  70. nodes[v].adj.PB( MP( u, w ) );
  71. }
  72. printf("%d\n", dfs( c, INT_MAX ));
  73. }
  74. return 0;
  75. }
  76.  
  77.