D题这样为什么通过不了啊

为什么D题只有百分之四十的通过率

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=1e5+10;
int n,m,p[N],s[N];
ll c;
struct Edge{
    int a,b,w;
    bool operator< (const Edge &W) const{
        return w<W.w;
    }
}edge[N];
int find(int u)
{
    if(p[u]!=u) p[u]=find(p[u]);
    return p[u];
}
vector<int> a;
ll check(int u)
{
    ll ans=0;
    int i=upper_bound(a.begin(), a.end(), u) - a.begin();
    int lenth=a.size();
    for(int j=lenth,k=i;j>=i&&k<lenth;j--,k++)
    {
        ans+=a[k]*(j-i);
    }
    return ans;
}
int main()
{
    cin>>n>>m>>c;
    int j=0; 
    for(int i=0;i<m;i++)
    {
        cin>>edge[i].a>>edge[i].b>>edge[i].w;
        
    }
    sort(edge,edge+m);
    for(int i=1;i<=n;i++) p[i]=i;
    for(int i=0;i<m;i++)
    {
        int x=edge[i].a,y=edge[i].b;
        if(find(x)!=find(y))
        {
        	p[find(x)]=find(y);
            a.push_back(edge[i].w);
            if(edge[i].w>j) j=edge[i].w;
        }
    }
    int l=0; int r=j;
    while(l<r)
    {
        int mid=(l+r)/2;
        if(check(mid)<=c) r=mid;
        else l=mid+1;
    }
    cout<<l;
}

}

全部评论
牛客小白月赛69D题
点赞 回复 分享
发布于 2024-05-21 23:06 湖北

相关推荐

凉风落木楚山秋:哈工爷200也去吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务