1 条题解

  • 0
    @ 2024-4-22 19:55:08

    这道题题目也都写了就是模版题。可以使用Kruskal:

    #include<bits/stdc++.h>
    
    #define ll long long 
    #define cst const int
    #define rt return 
    #define cn scanf
    #define ct printf
    
    using namespace std;
    
    cst N=5005;
    cst M=200005;
    
    struct node{
    	int a,b,w;
    }bian[M];
    
    int n,m,fa[N],total,bt;
    
    bool cmp(node B1,node B2);
    
    void csh();
    
    int find(int number);
    
    void cl(int number_1,int number_2);
    
    int main(){
    
    	cn("%d %d",&n,&m);
    	
    	if(n==1){
    		ct("0");
    		rt 0;
    	}
    	
    	for(int i=1;i<=m;i++)
    		cn("%d %d %d",&bian[i].a,&bian[i].b,&bian[i].w);
    	
    	sort(bian+1,bian+m+1,cmp);
    	
    	csh();
    	
    	for(int i=1;i<=m;i++){
    		if(find(bian[i].a)!=find(bian[i].b)){
    			cl(bian[i].a,bian[i].b);
    			total+=bian[i].w,bt++;
    			if(bt==n-1){
    				ct("%d",total);
    				return 0;
    			}
    		}
    	}
    	
    	ct("orz");
    	
    	return 0;
    }
    
    bool cmp(node b1,node b2){
    	rt b1.w<b2.w;
    }
    
    void csh(){
    	for(int i=1;i<=n;i++)
    		fa[i]=i;
    }
    
    int find(int num){
    	if(fa[num]==num)
    		rt num;
    	rt fa[num]=find(fa[num]);
    }
    
    void cl(int nm1,int nm2){
    	fa[find(nm1)]=find(nm2);
    }
    
    • 1

    信息

    ID
    2302
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    80
    已通过
    13
    上传者