luogu_1550题解打井(最小生成树)
Posted chriskkk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu_1550题解打井(最小生成树)相关的知识,希望对你有一定的参考价值。
题目:https://www.luogu.org/problemnew/show/P1550
设第n+1号点是水源点。
则题目变为求1到n+1的最小生成树。
w1 到 wn 就为 1 到 n 与 n+1 的连边。
后面的矩阵就是各自的连边。
代码如下:
#include<bits/stdc++.h> #define sc(x) scanf("%d",&x) using namespace std; int n,ans,cnt=1; struct edge int from,to,dis; bool operator < (const edge &a) const return dis>a.dis; e[400<<1]; priority_queue<edge> q; int fa[400],head[400]; inline int find(int x) if(fa[x]==x) return fa[x]; else return fa[x]=find(fa[x]); int main() sc(n); for(int i=1;i<=n;i++) int w;sc(w); q.push((edge)i,n+1,w); q.push((edge)n+1,i,w); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) int w;sc(w); q.push((edge)i,j,w); for(int i=1;i<=n+1;i++) fa[i]=i; while(cnt<n+1) edge e=q.top(); q.pop(); if(find(e.from)==find(e.to)) continue; else fa[find(e.from)]=find(e.to); cnt++; ans+=(e.dis); cout<<ans<<endl; system("pause"); return 0;
以上是关于luogu_1550题解打井(最小生成树)的主要内容,如果未能解决你的问题,请参考以下文章
P1550 [USACO08OCT]打井Watering Hole
luogu P1550 [USACO08OCT]打井Watering Hole
题解Luogu P2573 [SCOI2012] 滑雪 最小生成树