hdu1879 继续畅通工程 最小生成树
继续畅通工程
此题明显属于最小生成树的题目
关于最小生成树,有两种方法,一种是Kruskal方法,一种是Prim算法,第一种用并查集即可实现
1 /* 2 hdu1879 3 2013-03-18 15:25:50 Accepted 1879 406MS 360K 1188 B 4 典型的最小生成树,在做并查集时做的这道题, 5 所以使用并查集实现的克鲁斯卡尔算法 6 */ 7 #include <iostream> 8 #include <stdio.h> 9 #include <algorithm> 10 using namespace std; 11 12 struct node { 13 int start ,end,expense,flag; 14 }data[5005]; 15 16 int father[105]; 17 void make_set(int n) 18 { 19 for(int i=1;i<=n;i++) 20 father[i]=i; 21 } 22 int find_set(int x) 23 { 24 if(x^father[x]) 25 father[x]=find_set(father[x]); 26 return father[x]; 27 } 28 int union_set(int x,int y) 29 { 30 x=find_set(x); 31 y=find_set(y); 32 if(x==y) 33 return 0; 34 father[x]=y; 35 return 1; 36 } 37 bool cmp(node a,node b) 38 { 39 return a.expense<b.expense; 40 } 41 int main() 42 { 43 int n; 44 while(scanf("%d",&n)!=EOF) 45 { 46 if(!n) 47 break; 48 make_set(n); 49 int ans=0; 50 int m=(n-1)*n/2; 51 for(int i=0;i<m;i++) 52 { 53 scanf("%d%d%d%d",&data[i].start,&data[i].end,&data[i].expense,&data[i].flag); 54 if(data[i].flag)//当道路修通时,规定一节点为另一节点的父亲 55 father[data[i].start]=data[i].end; 56 } 57 sort(data,data+m,cmp);//按道路的花费升序排列 58 59 //在不构成环的前提下,选择最短的边,有贪心的思想 60 for(int i=0;i<m;i++) 61 { 62 if(union_set(data[i].start,data[i].end)) 63 ans+=data[i].expense; 64 } 65 printf("%d\n",ans); 66 } 67 return 0; 68 }
第二种则需要开辟一个二维邻接矩阵实现
1 /* 2 hdu1879 3 2013-03-20 17:30:48 Accepted 1879 187MS 324K 1496 B 4 最小生成树的prim算法, 5 */ 6 #include <iostream> 7 #include <stdio.h> 8 #include <string.h> 9 using namespace std; 10 int n; 11 int low[110];//存储将要联通的候选边 12 int visited[110];//是否已经并入联通集合 13 int map[110][110];//二维矩阵存储图 14 const int maxn=0x3fffffff;//无穷大 15 int prim() 16 { 17 18 int min; 19 int pos=0,ans=0; 20 memset(visited,0,sizeof(visited)); 21 visited[pos]=1;//从第一个点开始联通 22 for(int i=0;i<n;i++)//循环初始化 23 { 24 if(!visited[i]) 25 { 26 low[i]=map[pos][i]; 27 } 28 29 30 } 31 for(int i=1;i<n;i++) 32 { 33 min=maxn; 34 for(int j=0;j<n;j++) 35 { 36 if(min>low[j]&&!visited[j]) 37 { 38 min=low[j];//找到所有可连通边中的最短边 39 pos=j;//找到将要并入的下一个点 40 41 } 42 } 43 ans+=min; 44 visited[pos]=1; 45 for(int j=0;j<n;j++)//新点并入后更新最短边候选集合 46 { 47 if(!visited[j]&&map[pos][j]<low[j]) 48 low[j]=map[pos][j]; 49 } 50 } 51 return ans; 52 } 53 int main() 54 { 55 while(scanf("%d",&n)!=EOF) 56 { 57 if(!n)break; 58 int a,b,c,d; 59 int m=(n-1)*n/2; 60 for(int i=0;i<m;i++) 61 { 62 scanf("%d%d%d%d",&a,&b,&c,&d); 63 if(d)//若两点已经连通,不需新建道路,花费为零 64 { 65 map[a-1][b-1]=map[b-1][a-1]=0; 66 } 67 else 68 map[a-1][b-1]=map[b-1][a-1]=c; 69 70 } 71 printf("%d\n",prim()); 72 } 73 return 0; 74 }
转载于:https://www.cnblogs.com/caoyuanlang/archive/2013/03/20/2971690.html
hdu1879 继续畅通工程 最小生成树相关推荐
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description ...
- 还是畅通工程 最小生成树
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...
- HDU 1863畅通工程(最小生成树)(prim算法)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 畅通工程//最小生成树prim
题目: 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- hdu 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit: 2000/ ...
- 题目1017:还是畅通工程(最小生成树初步应用)
题目链接:http://ac.jobdu.com/problem.php?pid=1017 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- HDU 1863 畅通工程 最小生成树
思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O( ...
最新文章
- golang中的互斥锁
- css border 制作三角形
- Effective Java之考虑用序列化代理代理序列化实例(七十八)
- NYU Google: 知识蒸馏无处不在,但它真的有用吗?
- 二进制编译安装mysql_二进制编译安装mysql
- java高级教程_Java高级教程02
- eurekaAutoServiceRegistration 异常
- 形容计算机专业好句子,关于形容专业水平高的句子大全 精于专业的名言警句...
- fatal error C1010
- 51nod 1294 修改数组
- fir低通滤波器c语言,大神教你:FIR与IIR低通滤波器的最简最快实现
- VUE2.X全教程--基础详解(二)
- 计算房租收入比(1)- scrapy 爬取网上租房信息
- java文件写入不覆盖_java写入文件不覆盖写入_Java写入文件–用Java写入文件的4种方法...
- android 進度條_Android ProgressBar 反向進度條/進度條從右到左走
- 2022年系统集成项目管理工程师考试知识点:典型应用集成技术
- 王通:“Hipihi” VS “Second Life”
- 掩膜区域内像素值_掩膜(mask)
- CF刷题-Codeforces Round #481-F. Mentors
- 服务器装完系统无法引导
热门文章
- 网络推广——网络推广专员在面对不同阶段网站优化各有妙计
- 网站被k不要慌,看看“老油条”们是怎么解决的吧!
- 浅析网站建设的基本原则
- 网站空间建设并不难,难的是如何做好它!
- mysql sql 检测磁盘_MySQL 找到临时表用到磁盘的SQL
- 开发日记-20190616 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- (传送门)android绘图canvas.clipRect()方法的作用
- 下载恶意pcap包的网站汇总
- dnscat使用——整体感觉这个工具不完善,失败率很高,传文件时候没有完整性校验,我自己测试时通过域名转发失败,可能是其特征过于明显导致...
- 腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊...