小样例都过不了
查看原帖
小样例都过不了
746930
NO_OI_NO_LIFE楼主2023/9/24 13:39

rt

#include <cmath>
#include <cstdio>
#include <algorithm>
#include <memory>
#include <string>
#include <cstring>
#include <iostream>
#include <queue>
#define ll long long
using namespace std;

int a,b,head[505],cnt,f[505],ans,k;

struct node{
	int to,nxt,wei;
}e[1234567];

void addedge(int u,int v,int w){
	e[++cnt].to=u;
	e[cnt].wei=w;
	e[cnt].nxt=v;
	//head[u]=cnt;
}

bool cmp(node a,node b){
	return a.wei<b.wei;
}

int find(int x){
	if(x==f[x]) return x;
	return f[x]=find(f[x]);
}

void kruskal(){
	int aa,bb;
	k=0;
	for(int i=1;i<=cnt;i++){
		if(k==(b-1)) return;
		aa=find(e[i].to);
		bb=find(e[i].nxt);
		if(aa!=bb){
			f[aa]=bb;
			ans+=e[i].wei;
			k++;
		}
	}
	return;
}

int main(){
    //freopen("binary.in","r",stdin);
    //freopen("binary.out","w",stdout);
    cin>>a>>b;
    int p;
    for(int i=1;i<=b;i++)
    	for(int j=1;j<=b;j++){
    		cin>>p;
    		if(i<j&&p)
    			addedge(i,j,p);
		}
	for(int i=1;i<=b;i++)
		addedge(0,i,a); 
	for(int i=0;i<=b;i++)
		f[i]=i;
	sort(e+1,e+cnt+1,cmp);
	kruskal();
	cout<<ans<<endl;
	return 0;
}
2023/9/24 13:39
加载中...