ww
查看原帖
ww
328443
Textbook_blasphemy楼主2020/12/2 19:52

RT

Kru算法模板,大红大紫,求查错

代码没有考虑orz的情况

//邻接表 
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100010; 
int as=0; 
struct e{
    int from;//边的起点 
    int to;//边的终点 
    int now;//权值 
}a[MAXN];
int qian[MAXN];
int from,to,now,ans,k;
bool cmp(e a,e b){//自定义cmp函数,权值小的优先 
    return a.now<b.now;
}
int get_f(int x){
    if(qian[x]==x){
        return x;   
    }
    qian[x] = get_f(qian[x]);
    return qian[x];
}
bool check(int x,int y){
    int r1=get_f(x),r2=get_f(y);
    if(r1!=r2){
        qian[r1]=r2;
        return 1;
    }
    return 0;
}
int main(){
    int n,m;
    scanf("%d&d",&n,&m);
    for(int i=1;i<=m;i++){
        qian[i]=i;//自我为夫 
        scanf("%d%d%d",&from,&to,&now);
        a[as].from=from;
        a[as].to=to;
		a[as].now=now;
        as++;
    }
    sort(a,a+as,cmp);//权值排序 
    for(int i=0;i<as-1;i++){
        if(check(a[i].from,a[i].to)){//在不同集合(不构成环) 
            ans+=a[i].now;//确认连接 
            k++;//连接边数++ 
            if(k==n-1){//连接完了所有的点     
                break;
            }
        }
    }
    printf("%d",ans);//最小代价 
    return 0;
} 
2020/12/2 19:52
加载中...