求修正

P3366 【模板】最小生成树

wczxluo @ 2023-08-08 09:56:37

ID  题目  提交者 结果  用时  内存  语言  文件大小    提交时间    测评时间
#43598  1. 最小生成树模板  2022WCZXC2026   0   0ms 0kb C++11   768b    2023-08-08 09:48:16 2023-08-08 09:48:18
answer
#include<bits/stdc++.h>
using namespace std;
struct qwe{
    int q,w,e;
}a[50001];
int b[10000001];
int find(int x)
{
    if(b[x]!=x) b[x]=find(b[x]);
    return b[x];
}
void wer(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    b[fx]=fy;
}
bool comp(qwe x,qwe y)
{
    return x.w<y.w;
}
int main()
{
    int n,m;
    int ans=0;
    int num=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        b[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        cin>>a[i].e>>a[i].q>>a[i].w;
    }
    sort(a+1,a+1+m,comp);
    for(int i=1;i<=m;i++)
    {
        int fd=find(a[i].e),fg=find(a[i].q);
        if(fd!=fg)
        {
            ans+=a[i].w;
            num++;
            wer(fd,fg); 
            if(num==n-1) break;
        }

    }
    int q1,q2;
    q1=find(a[1].e);
    q2=find(a[2].q);
    if(q1!=q2)
    {
        cout<<"orz";
    }
    else cout<<ans;
}

by Field_Mouse @ 2023-08-08 10:01:12

@wczxluo 你这里联通性的判别出问题了,1和2联通不代表图联通,建议遍历并查集找父亲


by Field_Mouse @ 2023-08-08 10:02:11

@wczxluo 你这份记录就是连通性问题


by lyc2006 @ 2023-08-08 10:04:47

struct qwe{
    int q,w,e;
}a[50001];
int b[10000001]
$b[]$ 开大了

by lyc2006 @ 2023-08-08 10:07:19

联通性的判别直接判断


by wczxluo @ 2023-08-08 14:47:37

@egg_rat 谢谢


by wczxluo @ 2023-08-08 14:47:59

@lyc2006 谢谢


|