别的地方交都没事,就是在一本通交运行错误,一般是试多几次就可以了,但是这次不行,数组开大了也没用。
#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;
}