记录编号 596449 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2018]赛道修建 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 2.706 s
提交时间 2024-10-28 08:47:25 内存使用 8.49 MiB
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define pii pair<int,ll>
  5. #define fi first
  6. #define in inline
  7. #define se second
  8. #define mp make_pair
  9. #define pb push_back
  10. const int N = 5e4+10;
  11.  
  12. ll read(){
  13. ll x = 0,f = 1;char c = getchar();
  14. for(;c < '0' || c > '9';c = getchar())if(c == '-')f = -1;
  15. for(;c >= '0' && c <= '9';c = getchar())x = (x<<1) + (x<<3) + c-'0';
  16. return x * f;
  17. }
  18.  
  19.  
  20.  
  21.  
  22. int n,m;
  23. vector<pii>e[N];
  24.  
  25. int sum;
  26. multiset<ll>s[N];
  27. ll dfs(int x,int fa,ll mid){
  28. for(auto it : e[x]){
  29. int y = it.fi;
  30. if(y == fa)continue;
  31. ll l = dfs(y,x,mid) + it.se;
  32. if(l >= mid)sum++;
  33. else s[x].insert(l);
  34. }
  35. ll mx = 0;
  36. while(!s[x].empty()){
  37. if(s[x].size() == 1){
  38. mx = max(mx,*s[x].begin()),s[x].erase(s[x].begin());
  39. break;
  40. }
  41. auto it = s[x].lower_bound(mid - *s[x].begin());
  42. if(it == s[x].begin() && s[x].count(*it) == 1)it++;
  43. if(it == s[x].end()){
  44. mx = max(mx,*s[x].begin());
  45. s[x].erase(s[x].begin());
  46. }
  47. else{
  48. sum++;
  49. s[x].erase(s[x].find(*s[x].begin())),s[x].erase(s[x].find(*it));
  50. }
  51. }
  52. return mx;
  53. }
  54.  
  55. bool check(ll mid){
  56. sum = 0;
  57. dfs(1,0,mid);
  58. return sum >= m;
  59. }
  60.  
  61. int main(){
  62. freopen("2018track.in","r",stdin);
  63. freopen("2018track.out","w",stdout);
  64. n = read(),m = read();
  65. for(int i = 1;i < n;i++){
  66. int x = read(),y = read();ll z = read();
  67. e[x].pb({y,z}),e[y].pb({x,z});
  68. }
  69. ll l = 0,r = 1e9;
  70. while(l < r){
  71. ll mid = l + r + 1 >> 1;
  72. if(check(mid))l = mid;
  73. else r = mid - 1;
  74. }
  75. printf("%lld\n",l);
  76.  
  77. return 0;
  78.  
  79. }
  80.  
  81.