有没有一本通用户解答一下(玄关)
  • 板块灌水区
  • 楼主xQWQx
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/7/22 16:19
  • 上次更新2024/7/22 17:07:05
查看原帖
有没有一本通用户解答一下(玄关)
1024387
xQWQx楼主2024/7/22 16:19

1393

别的地方交都没事,就是在一本通交运行错误,一般是试多几次就可以了,但是这次不行,数组开大了也没用。

#include<bits/stdc++.h>
using namespace std;
struct node{
    int u,v;
    int w,p;
}a[10005];
int fa[2005];
int n,m;
int k,ans;
void init(){
    for(int i=1;i<=n;i++) {
        fa[i]=i;
    }
}
int get(int x){
    if(fa[x]==x){
        return x;
    }
    return fa[x]=get(fa[x]);
}
void merge(int x, int y){
    x=get(x);
    y=get(y);
    if(x!=y){
        fa[y]=x;
    }
}
int cmp(node x,node y){
    return x.w<y.w;
}
int kruskal(){
    for(int i=1;i<=m;i++){
        node t=a[i];
        if(get(a[i].v)!=get(a[i].u)){
            merge(a[i].v,a[i].u);
            ans+=a[i].w;
            k++;
        }
        if(k==n){
            return 0;
        }
    }
}
int main(){
    int sum=0;
    cin>>n>>m;
    init();
    for(int i=1;i<=m;i++){
        int p,u,v,w;
        cin>>p>>u>>v>>w;
        if(p==1) sum+=w,w=0;
        a[i].p=p;
        a[i].u=u;
        a[i].v=v;
        a[i].w=w;
    }
    sort(a+1,a+m+1,cmp);
    kruskal();
    cout<<ans+sum;
    return 0;
}
2024/7/22 16:19
加载中...