NC210473. 吉吉王国
描述
输入描述
第一行两个整数。接下来行每行三个整数表示城市和城市有一条长度为的道路。
输出描述
如果存在方案使得首都安全,输出最小的最长长度,否则输出-1。
示例1
输入:
4 6 1 2 1 1 3 2 1 4 3
输出:
3
C++ 解法, 执行用时: 4ms, 内存消耗: 444K, 提交时间: 2021-09-27 19:44:21
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e3+1; int n, m; vector<pair<int, int>> G[MAXN]; int x; long long dfs(int s, int f) { if (s != 1 && G[s].size() == 1) return 0x3f3f3f3f; long long ans = 0; for (auto [t, d]: G[s]) if (t != f) { ans += min(d<=x?d:0x3f3f3f3fll, dfs(t, s)); } return ans; } int main() { cin >> n >> m; for (int i = 1; i < n; i++) { int x, y, z; cin >> x >> y >> z; G[x].push_back({y, z}); G[y].push_back({x, z}); } int ans = dfs(1, 0); int lo = 0, hi = 0x3f3f3f3f; while (lo < hi) { x = (lo+hi)/2; if (dfs(1, 0) <= m) hi = x; else lo = x+1; } if (hi == 0x3f3f3f3f) cout << -1 << endl; else cout << lo << endl; }