道路建设

道路建设

https://ac.nowcoder.com/acm/problem/15108

最小生成树问题;
选n-1条边;

#include<bits/stdc++.h>
using namespace std;
//因为给边了,所以用最小生成树
const int maxn=10100;
int n,m,c,sum=0,f[maxn];
struct e{
    int u,v,w;
}edge[2*maxn];
int find(int x)
{
    if(x==f[x]) return x;
    else return f[x]=find(f[x]);
}
bool cmp(e i,e j)
{
    return i.w<j.w;
}
void krusal()
{
    for(int i=1;i<=n;i++)
    {
        int cnt=0,eu=find(edge[i].u),ev=find(edge[i].v);
        if(eu!=ev)
        {
            f[eu]=ev;
            sum+=edge[i].w;
            cnt++;
        }
        if(cnt==n-1) return;
    }
}
int main()
{
    while(scanf("%d %d %d",&c,&n,&m)!=EOF)
    {
        sum=0;
        memset(edge,0,sizeof(edge));
        memset(f,0,sizeof(f));
        for(int i=1;i<=n;i++) f[i]=i;
        for(int i=1;i<=n;i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            edge[i].u=u,edge[i].v=v,edge[i].w=w;
        }
        sort(edge+1,edge+1+n,cmp);
        krusal();
        if(sum<=c) printf("Yes\n");//如果花费小于所给经费,则满足
        else printf("No\n");
    }
}
全部评论

相关推荐

跨考计算机类,第一次写代码也能过一题,有没有机会啊
槛外呆燕:我感觉机会不大,大厂笔试做多了,感觉电信的真的太简单了,而且很多佬们会来卷三大运营商的岗位
投递中国电信等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客83265014...:完了,连现在都没开始面,13号投的是不是晚了
秋招的第一个offer,...
点赞 评论 收藏
分享
内向的柠檬精在研究求...:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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