poj 2421 Constructing Roads kruskal克鲁斯卡尔最小生成树
来源:互联网 发布:国产蓝牙耳机知乎 编辑:程序博客网 时间:2024/04/30 15:55
题意:给定n个村庄(顶点),给定各村庄之间直线距离,一个n*n的二维数组,第I行第j列的值代表顶点I到j的距离,然后是q个已经修好路的村庄,要求是修最短的路,使得所有村庄相互连通。
思路:将已经修好路的各村庄的权值变为0,求最小生成树。注意图是完全图,边数是n*n-1 / 2。
当作模板用一用吧
克鲁斯卡尔算法思想:从小到大考虑每一条边,一开始生成树为空树,如果边两端点不在生成树中,将边加入生成树中,否则不考虑当前边,直到树的条件达成
树的边与点之间的关系:e边数=n顶点数-1
#include<cstdio>#include<algorithm>#include<vector>using namespace std;const int maxn = 110;int a[maxn][maxn];int f[maxn];int n,en;struct edge{int w;int from,to;};vector<edge> e;bool cmp(edge a,edge b){return a.w<b.w;}void addedge(int from,int to,int w){edge Edge={w,from,to};e.push_back(Edge);}int Find(int x){if(f[x]==x)return x;else return f[x]=Find(f[x]);}int Kuscal(){int ans=0;for(int i=1;i<=n;i++)f[i]=i;for(int i=0;i<e.size();i++){int u=e[i].from;int v=e[i].to;int x=Find(u);int y=Find(v);if(x==y)continue;f[x]=y;ans+=e[i].w;en++;if(en==n-1)break;}return ans;}int main(){//freopen("in.txt","r",stdin);while(~scanf("%d",&n)){e.clear();// 注意! for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);int q,u,v;scanf("%d",&q);en=0;while(q--){scanf("%d%d",&u,&v);if(u>v)swap(u,v);a[u][v]=0;}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){addedge(i,j,a[i][j]);}}sort(e.begin(),e.end(),cmp);printf("%d\n",Kuscal());}}
0 0
- poj 2421 Constructing Roads kruskal克鲁斯卡尔最小生成树
- POJ 1251 Jungle Roads (最小生成树 Kruskal克鲁斯卡尔算法)
- poj-2421 Constructing Roads(最小生成树 Kruskal算法)
- poj 2421 Constructing Roads(最小生成树 kruskal算法)
- POJ 2421--Constructing Roads【水题 && 最小生成树 && kruskal】
- POJ 2421 Constructing Roads 最小生成树 Kruskal算法
- POJ-1251-Jungle Roads(最小生成树 克鲁斯卡尔)
- 最小生成树---克鲁斯卡尔kruskal算法
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 最小生成树-克鲁斯卡尔-Kruskal算法
- 最小生成树---克鲁斯卡尔kruskal算法---Simple one
- 求最小生成树_克鲁斯卡尔算法(Kruskal)
- 克鲁斯卡尔(Kruskal)算法求解最小生成树
- 最小生成树-克鲁斯卡尔-Kruskal算法
- MST最小生成树及克鲁斯卡尔(Kruskal)算法
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 最小生成树之克鲁斯卡尔(kruskal)算法
- RTSP协议、RTMP协议、HTTP协议的区别
- FMDB的使用
- 如何通过抓包抓出rtmp的完整留地址
- 系统对象的方法
- ConcurrentQueue的内存泄露BUG
- poj 2421 Constructing Roads kruskal克鲁斯卡尔最小生成树
- Error: Android SDK not found. Make sure that it is installed. If it is not at the default location,
- (hdu1007)Quoit Design,求最近点对
- React native webView Ios端禁止手势放大
- 【数据结构】看图理解单链表的反转
- java将流水数据转化成稀疏格式的购物篮式public class AccountCode { private String accountCode; public String getAc数据
- JAVA源码解读之Vector
- (vue.js)vue 父组件使用keep-alive和infinite-scroll导致在子组件触发父组件的infinite-scroll方法
- 阿里云的maven配置(转)