HDU 1879 继续畅通工程(Kruskal算法)
来源:互联网 发布:翻倍关注法优化 编辑:程序博客网 时间:2024/05/16 07:53
依旧最小生成树;
注意的是因为有些道路已经连通,那就利用cmp把它们先处理掉,再去处理边权小的边
畅通工程补完打卡~
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int N=110;const int M=5000;struct edge{ int u,v,w; int b; }edges[M]; int pre[N]; int find(int i){ return pre[i]==i?i:pre[i]=find(pre[i]); } int cmp(edge a,edge b){ if(a.b!=b.b) return a.b>b.b; else return a.w<b.w; } int kruskal(int n,int m){ int ans=0; for(int i=1;i<=n;i++) pre[i]=i; sort(edges+1,edges+m+1,cmp); for(int i=1;i<=m;i++){ int x=find(edges[i].u); int y=find(edges[i].v); if(x!=y){ if(edges[i].b==0) ans+=edges[i].w; pre[x]=y; } } return ans; } int main(){ int n; while(~scanf("%d",&n)&&n){ int m=(n-1)*n/2; for(int i=1;i<=m;i++){ scanf("%d %d %d %d",&edges[i].u,&edges[i].v,&edges[i].w,&edges[i].b); } int ans=kruskal(n,m); printf("%d\n",ans); }}
0 0
- HDU 1879 继续畅通工程(Kruskal算法)
- HDU:1879 继续畅通工程(kruskal)
- hdu 1879 继续畅通工程(Kruskal)
- HDU 1879 继续畅通工程(最小生成树 Kruskal算法)
- HDU 1879 继续畅通工程(kruskal,prim)
- HDUOJ 1879 继续畅通工程 kruskal算法
- HDU-#1879 继续畅通工程(Prim & Kruskal)
- HDU 1879 继续畅通工程(最小生成树Kruskal)
- HDU 1879 继续畅通工程(最小生成树 Kruskal)
- HDU 1879 继续畅通工程(最小生成树-Kruskal)
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
- HDU - 1879 - 继续畅通工程 (最小生成树之kruskal算法!!)
- HDU1879-继续畅通工程(Prim算法+Kruskal算法)
- HDU 1863 畅通工程(kruskal算法)
- hdu 1863 畅通工程(kruskal算法)
- HDU 1863 畅通工程(Kruskal算法)
- HDU 1879 继续畅通工程 最小生成树-Kruskal
- HDU 1879--继续畅通工程【kruskal && 最小生成树 && 水题】
- [生存志] 第64节 君子与小人
- maven下使用junit对spring进行单元测试_01基本应用
- 迪杰斯特拉求最短路径
- iOS 【Xcode使用代码设置各式各样的字体】
- MFC线程同步那些事
- HDU 1879 继续畅通工程(Kruskal算法)
- Spring AOP 实现原理
- 【Hibernate框架学习】:Hibernate进阶之详解Hibernate配置文件和对象关系映射配置文件
- 51nod 1105 第K大的数【二分+思维】好题~
- 求3×3矩阵对角线元素之和---2种方法
- Mysql5.7.16安装教程
- 服务器 进程实现
- POJ 2393 Yogurt factory 笔记
- 弗洛伊德法求最短路径