为什么点会报错呢?
查看原帖
为什么点会报错呢?
1387250
zifeiwoye楼主2024/7/19 09:44
 #include<bits/stdc++.h>
using namespace std;

struct edge{
    int u,v,w;
    bool operator<(const edge& a)const{
        return w<a.w;
    }
};
edge g[10010];
int head[10010],tot=0,ans,m,n,u,v,w;

struct dsu{//并查集
    int fa[10010];
    int siz[10010];
    int n;
    void init(){
        for(int i=1;i<=n;i++) fa[i]=i,siz[i]=1;
    }
    int find(int p)//;路径压缩
    {
        if(p==fa[p]) return p;
        return fa[p]=find(fa[p]);
    }
    void merge(int x,int y)//;合并
    {
        x=find(x),y=find(y);
        if(x==y) return;
        if(siz[x]>siz[y]) swap(x,y);
        fa[x]=y;
        siz[y]+=siz[x];
    }
};

void add(int u,int v,int w)
{
    g[++tot].u=u;
    g[tot].v=v;
    g[tot].w=w;
    head[u]=tot;
}

void kruskal()
{
    sort(g+1,g+m+1);
    dsu.n=n;
    dsu.init();
    for(int i=0;i<=m;i++)
    {
        int u=g[i].u,v=g[i].v;
        u=dsu.find(u),v=dsu.find(v);
        if(u!=v)
        {
            dsu.merge(u,v);
            ans=g[i].w;
        }
    }
}

int main()
{
	cin>>m>>n;
	for(int i=1;i<=n;i++){
		cin>>u>>v>>w;
		add(u,v,w);
	}
	kruskal();
	cout<<ans;
    return 0;
}
2024/7/19 09:44
加载中...