提交记录 6859


用户 题目 状态 得分 用时 内存 语言 代码长度
chenqiqian noip18c. 【NOIP2018】赛道修建 Wrong Answer 80 114.734 ms 10208 KB C++ 2.18 KB
提交时间 评测时间
2018-11-10 16:18:47 2020-08-01 00:51:02
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#define int long long
using namespace std;

const int MAXN = 51000;

struct Edge{
  int to,len;
  int nex;
}edge[MAXN*2];int fir[MAXN],ecnt = 2;

void addedge(int a,int b,int c){
  edge[ecnt] = (Edge){b,c,fir[a]};
  fir[a] = ecnt++;
}

int n,m;
int ANS,TAR;

void init(){
  scanf("%lld %lld",&n,&m);
  for(int i = 2;i<=n;i++){
    int a,b,c;
    scanf("%lld %lld %lld",&a,&b,&c);
    addedge(b,a,c),addedge(a,b,c);
  }
}


vector<int> S[MAXN];

bool cmp(int a,int b){
  return a > b;
}

pair<int,int> check2(int nown){
  sort(S[nown].begin(),S[nown].end(),cmp);
  int l = S[nown].size();
  if(l == 0)
    return make_pair(0,0);
  if(l == 1)
    return make_pair(0,S[nown][0]);
  if(S[nown][0] + S[nown][1] < TAR)
    return make_pair(0,S[nown][0]);
  // printf("%lld\n",nown);
  // for(unsigned i = 0;i<S[nown].size();i++){
  //   printf("%lld ",S[nown][i]);
  // }
  // printf("\n");
  int ans = 0;
  int notvis_max = 0,LL = 0,RR = l-1;
  while(true){
    if(LL > RR) break;
    while(LL < RR && S[nown][RR] + S[nown][LL] < TAR){
      notvis_max = S[nown][RR];
      RR--;
    }
    if(LL == RR){
      notvis_max = S[nown][LL];
      break;
    }
    ans++;
    LL++,RR--;
  }
  return make_pair(ans,notvis_max);
}

int dfs(int nown,int fa){
  for(int nowe = fir[nown];nowe;nowe = edge[nowe].nex){
    int v = edge[nowe].to,len = edge[nowe].len;
    if(v == fa) continue;
    int t = dfs(v,nown) + len;
    if(t >= TAR){
      ANS++;
    }
    else{
      if(t != 0){
        //printf("nown:%lld push:%lld\n",nown,t);
        S[nown].push_back(t);
      }
    }
  }
  pair<int,int> pp = check2(nown);
  // printf("%lld: pp:%lld %lld\n",nown,pp.first,pp.second);
  ANS += pp.first;
  return pp.second;
}

bool check(int x){
  // printf("check:%lld-------------\n",x);
  for(int i = 1;i<=n;i++)
    S[i].clear();
  ANS = 0;TAR = x;
  int t = dfs(1,0);
  if(t >= TAR) ANS++; 
  // printf("ANS:%lld\n",ANS);
  return ANS >= m;
}

void solve(){
  int L = 1,R = 0x3f3f3f3f;
  while(L!=R){
    int mid = ((L+R-1)>>1) + 1;
    if(check(mid))
      L = mid;
    else
      R = mid-1;
  }
  printf("%lld\n",L);
}

signed main(){
  init();
  solve();
  return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1244.4 us1 MB + 204 KBAcceptedScore: 5

Testcase #2249.74 us1 MB + 204 KBAcceptedScore: 5

Testcase #3254.57 us1 MB + 204 KBAcceptedScore: 5

Testcase #41.136 ms1 MB + 292 KBAcceptedScore: 5

Testcase #565.983 ms3 MB + 292 KBAcceptedScore: 5

Testcase #656.591 ms3 MB + 592 KBAcceptedScore: 5

Testcase #767.725 ms3 MB + 292 KBAcceptedScore: 5

Testcase #8114.734 ms4 MB + 772 KBAcceptedScore: 5

Testcase #9915.5 us1 MB + 384 KBAcceptedScore: 5

Testcase #1037.285 ms6 MB + 476 KBAcceptedScore: 5

Testcase #1167.98 ms9 MB + 992 KBAcceptedScore: 5

Testcase #12276.57 us1 MB + 212 KBAcceptedScore: 5

Testcase #13274.73 us1 MB + 212 KBAcceptedScore: 5

Testcase #14388.31 us1 MB + 220 KBAcceptedScore: 5

Testcase #15386.96 us1 MB + 224 KBAcceptedScore: 5

Testcase #161.167 ms1 MB + 296 KBAcceptedScore: 5

Testcase #171.289 ms1 MB + 288 KBWrong AnswerScore: 0

Testcase #1851.385 ms3 MB + 396 KBWrong AnswerScore: 0

Testcase #1955.419 ms3 MB + 584 KBWrong AnswerScore: 0

Testcase #2094.743 ms5 MB + 392 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-09 09:42:57 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠