版权声明:请大家斧正,如喜欢的话,为拙见点一个赞吧。 https://blog.csdn.net/qq_39897867/article/details/82690723
#题目
https://www.luogu.org/problemnew/show/P2330
#解题思路
题目给出的前两个条件就是裸的
,对于最后的一个条件,我们只需要用一个
记录最后一个点的分值即可。
#代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{int x,y,w,next;}a[100001];
int len,last[10001],n,m,x,y,z,maxn,fa[10001];
int find(int x) {return fa[x]==x?fa[x]:fa[x]=find(fa[x]);}
void add(int x,int y,int z)
{
a[++len]=(node){x,y,z,last[x]}; last[x]=len;
a[++len]=(node){y,x,z,last[y]}; last[y]=len;
}
bool cmp(node x,node y){return x.w<y.w;}
int main()
{
scanf("%d%d",&n,&m); printf("%d ",n-1);
for (int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&z),add(x,y,z);
for (int i=1;i<=n;i++) fa[i]=i;
sort(a+1,a+len+1,cmp);
for (int i=1;i<=len;i++)
{
int q=find(a[i].x),w=find(a[i].y);
if (q!=w){
fa[q]=fa[w]; maxn=a[i].w; n--;
}
if (n==1) break;
}
printf("%d",maxn);
}