提交记录 9288


用户 题目 状态 得分 用时 内存 语言 代码长度
Slr2002 noip18c. 【NOIP2018】赛道修建 Time Limit Exceeded 85 1 s 9020 KB C++ 1.96 KB
提交时间 评测时间
2019-04-22 16:49:55 2020-08-01 01:35:30
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define M 50010
using namespace std;
int n,m,num,mid,sum,ans,l,r,maxn,p;
int head[M],vis[M];
struct point{int next,to,dis;}e[M<<1];
struct node{int id,v;};
vector<node>S[M];
bool operator < (node a1,node a2){return a1.v<a2.v;}
void add(int from,int to,int dis)
{
    e[++num].next=head[from];
    e[num].to=to;
    e[num].dis=dis;
    head[from]=num;
}
int dfs(int x,int fa)
{
    for(int i=head[x];i;i=e[i].next)
        if(e[i].to!=fa)
        {
            int l=dfs(e[i].to,x)+e[i].dis,to=e[i].to;
            S[x].push_back((node){to,l});
        }
    int G=S[x].size();
    sort(S[x].begin(),S[x].end());
    for(int i=G-1;i>=0;i--) 
    {
        if(S[x][i].v>=mid) sum++,vis[S[x][i].id]=true;
        else break;
    }
    for(int i=0;i<G;i++)
    {
        int u=S[x][i].id,l=S[x][i].v;
        if(vis[u]) continue;
        for(int j=i+1;j<G;j++)
        {
            if(vis[S[x][j].id]) continue;
            if(l+S[x][j].v<mid) continue;
            vis[u]=vis[S[x][j].id]=true;
            sum++;
            break;
        }
    }
    for(int i=G-1;i>=0;i--)
        if(!vis[S[x][i].id])
            return S[x][i].v;
    return 0;
}
void DFS(int x,int fa,int now)
{
    if(now>=maxn) maxn=now,p=x;
    for(int i=head[x];i;i=e[i].next)
        if(e[i].to!=fa)
            DFS(e[i].to,x,now+e[i].dis);
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<n;i++)
    {
        int a,b,c;scanf("%d%d%d",&a,&b,&c);
        add(a,b,c),add(b,a,c);
        r+=c;
    }
    if(n>=1000&&m==1)
    {
        DFS(1,0,0);
        maxn=0;
        DFS(p,0,0);
        cout<<maxn<<endl;
        return 0;
    }
    r/=m;
    while(l<=r)
    {
        for(int i=1;i<=n;i++) 
            S[i].clear();
        memset(vis,false,sizeof(vis));
        mid=(l+r)/2;
        sum=0,dfs(1,1);
        if(sum<m) r=mid-1;
        else ans=mid,l=mid+1;
    }
    printf("%d\n",ans);
    return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1268.77 us1 MB + 388 KBAcceptedScore: 5

Testcase #2269.62 us1 MB + 388 KBAcceptedScore: 5

Testcase #3270.46 us1 MB + 388 KBAcceptedScore: 5

Testcase #4297.04 us1 MB + 228 KBAcceptedScore: 5

Testcase #52.645 ms1 MB + 1012 KBAcceptedScore: 5

Testcase #63.769 ms2 MB + 152 KBAcceptedScore: 5

Testcase #71 s2 MB + 676 KBTime Limit ExceededScore: 0

Testcase #81 s3 MB + 604 KBTime Limit ExceededScore: 0

Testcase #9697.25 us1 MB + 540 KBAcceptedScore: 5

Testcase #1019.214 ms5 MB + 864 KBAcceptedScore: 5

Testcase #1135.054 ms8 MB + 828 KBAcceptedScore: 5

Testcase #12289.53 us1 MB + 392 KBAcceptedScore: 5

Testcase #13285.06 us1 MB + 392 KBAcceptedScore: 5

Testcase #14362.15 us1 MB + 396 KBAcceptedScore: 5

Testcase #15352.95 us1 MB + 400 KBAcceptedScore: 5

Testcase #16805.64 us1 MB + 452 KBAcceptedScore: 5

Testcase #17868.92 us1 MB + 444 KBAcceptedScore: 5

Testcase #1830.713 ms2 MB + 784 KBAcceptedScore: 5

Testcase #19333.038 ms2 MB + 972 KBAcceptedScore: 5

Testcase #201 s4 MB + 224 KBTime Limit ExceededScore: 0


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