最短路径 kruskal 选边 并查集模板
Posted sunchuangyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径 kruskal 选边 并查集模板相关的知识,希望对你有一定的参考价值。
https://www.luogu.com.cn/problem/P1546
#include<bits/stdc++.h> #define N 1000 using namespace std; struct node{ int x,y,w; bool const < (node &o){ return w < o.w; } }a[N]; int f[N]; int find(int x){ if(x==f[x]) return x; return f[x]=find(f[x]); } int main(){ int n,k,m=0; scanf("%d",&n); for(int i=1;i<=n;i++){ f[i]=i; for(int j=1;j<=n;j++) { scanf("%d",&k); if(j>i){ m++; a[m].x=i;a[m].y=j;a[m].w=k; } } } sort(a+1,a+m+1 );//排序 int ans=0,p=1; for(int i=1;i<=m;i++){ if(find(a[i].x)!=find(a[i].y)){ //如果不在一个集合 ans+=a[i].w; f[find(a[i].x)]=a[i].y; //合并两个节点 p++; if(p==n) break; } } cout<<ans; return 0; }
以上是关于最短路径 kruskal 选边 并查集模板的主要内容,如果未能解决你的问题,请参考以下文章
CF1253F Cheap Robot(神奇思路,图论,最短路,最小生成树/Kruskal 重构树/并查集)