热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【洛谷P7528】PortalsG【最小生成树】

linklinklink分析:很明显是kruskalkruskalkruskal然后考虑把所有环合并起来的最小代价那就是加的边的总和因为kruskalkruska

在这里插入图片描述
在这里插入图片描述
linklinklink

分析:

很明显是kruskalkruskalkruskal 然后考虑把所有环合并起来的最小代价 那就是加的边的总和
因为kruskalkruskalkruskal 按边权排过序 这样选的一定是最优的

CODE:

#include
#include
#include
#include
#include
using namespace std;
const int N=1e5+5;
int n,p[N][4],fa[N<<1],a[N],ans;
int find(int x){return x&#61;&#61;fa[x]?x:fa[x]&#61;find(fa[x]);}
void Merge(int x,int y)
{int fx&#61;find(x),fy&#61;find(y);fa[fx]&#61;fy;
}
vector<pair<int,int> > Vec;
int main(){scanf("%d",&n);for(int i&#61;1;i<&#61;(n<<1);i&#43;&#43;)fa[i]&#61;i;for(int i&#61;1;i<&#61;n;i&#43;&#43;){scanf("%d%d%d%d%d",&a[i],&p[i][0],&p[i][1],&p[i][2],&p[i][3]);Merge(p[i][0],p[i][1]);Merge(p[i][2],p[i][3]);}for(int i&#61;1;i<&#61;n;i&#43;&#43;)Vec.push_back(make_pair(a[i],i));sort(Vec.begin(),Vec.end());for(int i&#61;0;i<n;i&#43;&#43;){int x&#61;Vec[i].second;int fx&#61;find(p[x][0]),fy&#61;find(p[x][2]);if(fx^fy){fa[fx]&#61;fy;ans&#43;&#61;Vec[i].first;}}printf("%d",ans);return 0;
}


推荐阅读
author-avatar
米粒尖尖果儿_445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有