当前位置: 代码迷 >> 综合 >> 洛谷 2820 局域网
  详细解决方案

洛谷 2820 局域网

热度:67   发布时间:2023-12-06 08:26:29.0

题目:局域网


思路:

kruskal求最小生成树。

使得图中没有回路且联通也就是图中仅仅剩下一颗生成树,要求删掉的值最大也就是求最小生成树。


代码:

#include<bits/stdc++.h>
using namespace std;struct Edge{int x,y,z;Edge(){}Edge(int xx,int yy,int zz){x=xx,y=yy,z=zz;}bool operator <(const Edge& oth) const {return z<oth.z||(z==oth.z&&(y<oth.y||(y==oth.y&&x<oth.x)));}
};int n,m;
Edge a[10005];
int fa[10005];
int sum=0,ans=0;int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);
}void kruskal(){for(int i=1;i<=m;i++){int f1=find(a[i].x),f2=find(a[i].y);if(f1==f2) continue;fa[f1]=f2;ans+=a[i].z;}
}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);sum+=a[i].z;}sort(a+1,a+m+1);for(int i=1;i<=m;i++) fa[i]=i;kruskal();printf("%d",sum-ans);return 0;
}

  相关解决方案