求助,请问一下这个代码为何会超时?
查看原帖
求助,请问一下这个代码为何会超时?
672837
DaShabby楼主2022/3/6 10:10
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long llu;
const long long int MAX=5e3+100,inf=0x3f3f3f3f,MAXN=1e6;
typedef struct node{
    int from,to;
    llu dis;
}stick;
stick arr[MAXN];
llu fa[MAXN];
bool cmp(stick x,stick y){
    return x.dis<y.dis;
}
int find(int a){
    while(a!=fa[a])a=fa[a];
    return a;
}
void unionn(int x,int y){
    x=find(x);
    y=find(y);
    fa[x]=y;
}
llu Kruskal(stick*a,int n,int m){
    llu num=0;
    llu sum=0;
    for(int i=1;i<=m;i++){
        if(find(a[i].from)!=find(a[i].to)){
            sum+=a[i].dis;
            num++;
            unionn(a[i].from,a[i].to);
        }
        if(n-1==num){
            return sum;
        }
    }
    if(n-1!=num)return -1;
}
int main()
{
    int n,m,u,v;
    llu w;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>u>>v>>w;
        fa[u]=u,fa[v]=v;
        arr[i].from=u,arr[i].to=v,arr[i].dis=w;
    }
    sort(arr+1,arr+1+m,cmp);
    llu sum=Kruskal(arr,n,m);
    cout<<sum<<endl;
    return 0;
}```
2022/3/6 10:10
加载中...