//#include #include #include #include #include #include using namespace std; int a[10000], n, mil[100001]; bool v[10000]; queue q; vector boom; vector > m[10000]; int main() { ifstream inpf("famtree.in", ios::in); int ai, bi, yi, root = 0, node, i, temp, max = 0; //cin >> n; inpf >> n; for(i = 1; i < n; ++i) { //cin >> ai >> bi >> yi; inpf >> ai >> bi >> yi; m[bi-1].push_back(make_pair(ai-1, yi)); //m[bi-1][ai-1] = yi; v[ai-1] = 1; } for(i = 0; i < n; ++i) { //cout << v[i] << " "; if(!v[i]) { root = i; break; } } //cout << endl; q.push(root); while(!q.empty()) { node = q.front(); //cout << node << endl; q.pop(); for(i = 0; i < m[node].size(); ++i) { a[m[node][i].first] = a[node] + m[node][i].second; q.push(m[node][i].first); } /* for(i = 0; i < n; ++i) { if(m[node][i]) { a[i] = a[node] + m[node][i]; q.push(i); } } */ } for(i = 0; i < n; ++i) { //cout << a[i] << " "; temp = a[i] / 1000; ++mil[temp]; if(temp > max) { max = temp; } } //cout << mil[0] << " "; for(i = 1; i < max; ++i) { //cout << mil[i] << " "; if(mil[i] > mil[i-1] && mil[i] > mil[i+1]) { boom.push_back(i); } } //cout << endl; ofstream outf("famtree.out", ios::out); sort(boom.begin(), boom.end()); n = boom.size() - 1; for(i = 0; i <= n; ++i) { //cout << boom[i] << " "; outf << boom[i] << " "; }/* for(i = 0; i < n; ++i) { //cout << boom[i] << " "; outf << boom[i] << " "; } if(n >= 0) { //cout << boom[n]; outf << boom[n]; }*/ //cout << endl; outf << endl; return 0; }