题解 | #道路建设#

道路建设

https://ac.nowcoder.com/acm/contest/26077/1010

最小生成树的模板题

解法一:prim算法

prim算法的原理
直接上y总的prim模板

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N=110;

int g[N][N];
int n,m,fund;
int dist[N];
int st[N];

int prim(){
    
    int res=0;
    memset(dist,0x3f,sizeof dist);
    
    dist[1]=0;
    for(int i=0;i<n;++i){
        int t=-1;
        for(int j=1;j<=n;++j)
            if(!st[j]&&(t==-1||dist[j]<dist[t]))
                t=j;
        
        st[t]=1;
        if(i)
            res+=dist[t];
        for(int j=1;j<=n;++j) dist[j]=min(dist[j],g[t][j]);
    }
    
    return res;
}
int main(){
    cin>>fund>>m>>n;
    memset(g,0x3f,sizeof g);
    while(m--){
        int a,b,c;
        cin>>a>>b>>c;
        g[a][b]=g[b][a]=min(g[a][b],c);
    }
    
    if(prim()>fund){
        cout<<"No";
    }else{
        cout<<"Yes";
    }
    return 0;
}

解法二: kruskal算法(克鲁斯卡尔算法)

kruskal原理 直接上模板

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N=10010;

struct edge{
    int a,b,w;
    bool operator<(const edge& W)const{
        return w<W.w;
    }
}edges[N];

int ancient[N];

int find(int x){   //并查集相关:寻找祖宗节点
    if(ancient[x]!=x)
        ancient[x]=find(ancient[x]);
    return ancient[x];
}

int main(){
    
    int n,m,fund;
    cin>>fund>>m>>n;
    
    for(int i=0;i<m;++i){
        int a,b,c;
        
        cin>>a>>b>>c;
        edges[i]={a,b,c};
    }
    
    for(int i=1;i<=n;++i){
        ancient[i]=i;
    }
    
    sort(edges,edges+m);
    
    int amt=0;
    for(int i=0;i<m;++i){
        
        int a=edges[i].a,b=edges[i].b,c=edges[i].w;
        a=find(a),b=find(b);
        if(a!=b){
            ancient[a]=b;
            amt+=c;
        }
    }
    if(amt>fund)
        cout<<"No";
    else
        cout<<"Yes";
    
    return 0;
    
}

全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
拉丁是我干掉的:把上海理工大学改成北京理工大学。成功率增加200%
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务