社区讨论
帮帮忙超时五个点!
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 条回复,欢迎继续交流。
正在加载回复...