社区讨论

帮帮忙超时五个点!

P4234最小差值生成树参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi6xlbok
此快照首次捕获于
2025/11/20 12:28
4 个月前
此快照最后确认于
2025/11/20 12:28
4 个月前
查看原帖
CPP
#define INF 0x7fffffff
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct tree
{
    int x,y,v;
}a[200001];
int n,m,tot,res;
int father[50001];
int find(int x)
{
    if(father[x]!=x)
    father[x]=find(father[x]);
    return father[x];
}
void init()
{
    for(register int i=1;i<=n;i++)
    father[i]=i;
}
bool cmp(tree p,tree q)
{
    return p.v<q.v;
}
inline int read()
{
    int w=1,x=0;
    char c=getchar();
    while(c>'9'||c<'0')
    {
        if(c=='-')
        w=-1;
        c=getchar();
    }
    while(c<='9'&&c>='0')
    {
        x=x*10+c-'0';
        c=getchar();
    }
    return w*x;
}
int main()
{
    register int i,j,t1,t2;
    n=read();
    m=read();
    for(i=1;i<=n;i++)
    father[i]=i;
    for(i=1;i<=m;i++)
    {
        a[i].x=read();
        a[i].y=read();
        a[i].v=read();
    }
    sort(a+1,a+m+1,cmp);
    res=INF;
    for(i=1;i<=m;i++)
    {
        init();
        tot=0;
        for(j=i;j<=m;j++)
        {
            t1=find(a[j].x);
            t2=find(a[j].y);
            if(t1!=t2)
            {
                father[t1]=t2;
                tot++;
            }
            if(tot==n-1)
            {
                res=min(res,a[j].v-a[i].v);
                break;
            }
        }
    }
    cout<<res<<endl;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...