Go to diff to previous submission
#include <cstdio> #include <cmath> #include <cstdio> #include <cstring> #include <iomanip> #include <iostream> #include <limits.h> #include <map> #include <queue> #include <vector> #include <set> #include <stack> #include <bitset> #include <string> using namespace std; typedef pair<int,int> ii; typedef vector<int> vi; typedef vector<ii> vii; typedef set<int> si; typedef set<ii> sii; #define MP make_pair #define PB push_back #define REP(i,a) for ( int i = 0; i < int(a); i++) #define FOR(i,a,b) for ( int i = int(a); i<=int(b); i++) #define FORD(i,a,b) for(int i= int(a); i>=int(b); i--) const int INF = 1<<29; typedef long long int ll; struct node { bool visited; int parent; vii adj; } nodes[1001]; int dfs( int v, int cap ) { //printf("node%d %d\n", v, cap); nodes[v].visited = true; int sum = 0; FOR( i, 0, nodes[v].adj.size( )-1 ) { if ( !nodes[ nodes[v].adj[i].first ].visited ) sum += dfs( nodes[v].adj[i].first, nodes[v].adj[i].second ); } if ( sum == 0 ) return cap; return min( sum, cap ); } int main() { int n, c, u, v, w; while ( scanf("%d%d", &n, &c) == 2 ) { FOR( i, 1, n ) { nodes[i].parent = 0; nodes[i].visited = false; nodes[i].adj.clear( ); } FOR( i, 1, n-1 ) { scanf("%d%d%d", &u, &v, &w); nodes[u].adj.PB( MP( v, w ) ); nodes[v].adj.PB( MP( u, w ) ); } printf("%d\n", dfs( c, INT_MAX )); } return 0; }
--- c5.s692.cteam013.fr.cpp.0.fr.cpp +++ c5.s696.cteam013.fr.cpp.0.fr.cpp @@ -50,5 +50,5 @@ if ( sum == 0 ) return cap; - return sum; + return min( sum, cap ); }