Submission #1293860

#TimeUsernameProblemLanguageResultExecution timeMemory
1293860saidshikhovPaprike (COI18_paprike)C++20
13 / 100
73 ms10892 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; vector<vector<int>> graph; vector<int> h; int n, k; int cuts = 0; // DFS возвращает сумму в поддереве, которую можно оставить соединенной с родителем int dfs(int node, int parent) { int total = h[node]; // Начинаем с остроты текущего перца for (int neighbor : graph[node]) { if (neighbor == parent) continue; int child_sum = dfs(neighbor, node); // Если добавление поддерева ребенка не превышает k - добавляем if (total + child_sum <= k) { total += child_sum; } else { // Иначе - делаем разрез cuts++; } } return total; } int main() { cin >> n >> k; h.resize(n); graph.resize(n); // Читаем остроты перцев for (int i = 0; i < n; i++) { cin >> h[i]; } // Строим дерево for (int i = 0; i < n - 1; i++) { int u, v; cin >> u >> v; u--; v--; // Переводим в 0-индексацию graph[u].push_back(v); graph[v].push_back(u); } // Запускаем DFS из произвольной вершины (0) dfs(0, -1); cout << cuts << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...