Go to diff to previous submission
#include <iostream> #include <map> using namespace std; int getCountFor ( multimap<int, int> & edges, map<pair<int, int>, int> & values, int X, int last ) { int prize = values[ pair<int, int>( X, last ) ]; multimap<int, int>::iterator from = edges.lower_bound( X ); multimap<int, int>::iterator to = edges.upper_bound( X ); int sum = 0; int x = 0; for ( ; from != to; ++from ) { if ( from->second != last ) { x++; sum += getCountFor( edges, values, from->second, X ); } } if ( X == last ) { return sum; } if (x == 0) { return prize; } return prize > sum ? sum : prize; } int main ( void ) { int N, C; while ( cin >> N >> C ) { multimap<int, int> edges; map<pair<int, int>, int> values; values[pair<int, int>(C, C)] = 1000000000; int U, V, W; for ( int i = 0; i < N - 1; i++ ) { cin >> U >> V >> W; pair<int, int> p1( U, V ); pair<int, int> p2( V, U ); edges.insert(p1); edges.insert(p2); values[ p1 ] = W; values[ p2 ] = W; } cout << getCountFor(edges, values, C, C) << endl; } return 0; }
--- c5.s728.cteam021.fr.cpp.0.fr.cpp +++ c5.s739.cteam021.fr.cpp.0.fr.cpp @@ -19,4 +19,8 @@ } + if ( X == last ) { + return sum; + } + if (x == 0) { return prize; @@ -34,5 +38,5 @@ map<pair<int, int>, int> values; - values[pair<int, int>(C, C)] = 10000; + values[pair<int, int>(C, C)] = 1000000000; int U, V, W;