题目:局域网
思路:
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;
}