hdu 1879 继续畅通工程
最小生成树入门题,和纯粹的裸题有些区别,题目中有些道路已经存在,不需要建造,答案是求最后建造的总费用,不要把已经有的道路的权值算进去
//kruskal算法已有的边权植赋为0 //用SORT排序,用并查集判断是否成环 #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define INF 1236343242 #define MAX 110 bool vis[MAX][MAX]; int p[MAX]; int ans[MAX*MAX];struct edge {int b,e,w; }a[MAX*MAX]; int n;int cmp(struct edge p , struct edge q) {return p.w<q.w; }int find(int x) {return p[x]==x ? x : p[x]=find(p[x]); } void kruskal() {int x,y,i,j,k,count;int sum;for(i=1; i<=n; i++)p[i]=i;for(sum=0,i=1; i<=n; i++){x=find(a[i].b);y=find(a[i].e);if(x!=y){p[x]=y;sum+=a[i].w;}}printf("%d\n",sum);return ; } void init() {int i,j,t;for(i=1; i<=n; i++){scanf("%d%d%d%d",&a[i].b,&a[i].e,&a[i].w,&t);if(t)a[i].w=0; //权值改为0 } } int main() {int i,j,t;while(scanf("%d",&n)!=EOF && n){n=n*(n-1)/2;init();sort(a+1 , a+n+1 , cmp);kruskal();}return 0; }
//Prim算法实现 #include <stdio.h> #include <string.h> #define MAX 110 #define INF 1232145125 bool vis[MAX][MAX]; int G[MAX][MAX]; int adj[MAX]; int lowcoat[MAX]; int n;void init() {int i,j,a,b,c,d;memset(vis , 0 ,sizeof(vis));for(i=0; i<=n; i++)for(j=0; j<=n; j++)G[i][j]=INF;for(i=0; i<=n; i++)G[i][i]=0;for(i=1; i<=n*(n-1)/2; i++){scanf("%d%d%d%d",&a,&b,&c,&d);G[a][b]=G[b][a]=c;if(d){vis[a][b]=vis[b][a]=1;G[a][b]=G[b][a]=-1; //已经有的道路我们假设它的权值为-1} // printf("G[%d][%d]=G[%d][%d]=%d\n",a,b,b,a,G[a][b],G[b][a]); } }void prim() {int v,i,j,k,min,ans;for(i=1; i<=n; i++){adj[i]=1;lowcoat[i]=G[1][i];}lowcoat[1]=0;for(v=1; v<n; v++){min=INF; k=1;for(i=1; i<=n; i++)if(lowcoat[i] && lowcoat[i]<min){min=lowcoat[i];k=i;}lowcoat[k]=0; // printf("min=%d\n",min); // printf("k=%d\n",k);for(i=1; i<=n; i++)if(lowcoat[i] && G[k][i]<lowcoat[i]){lowcoat[i]=G[k][i];adj[i]=k;}}// printf("lowcoat: "); // for(i=1; i<=n; i++) printf("%d ",lowcoat[i]); printf("\n"); // printf("adj: "); // for(i=1; i<=n; i++) printf("%d ",adj[i]); printf("\n");for(ans=0,v=2; v<=n; v++){i=adj[v];if(G[i][v]!=-1) //如果这条路本身存在则不要算它的费用,不存在的才要算ans+=G[i][v];}printf("%d\n",ans); } int main() {while(scanf("%d",&n)!=EOF && n){init();prim();}return 0; }
转载于:https://www.cnblogs.com/scau20110726/archive/2012/10/10/2719204.html
hdu 1879 继续畅通工程相关推荐
- hdu 1879 继续畅通工程 最小生成树
继续畅通工程 Time Limit: 2000/ ...
- 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 - 1879 继续畅通工程 【最小生成树 - 升级】
Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任 ...
- hdu 1879 继续通畅工程(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...
- HDU 1233 还是畅通工程(最小生成树 Prim+Kruskal)
原题地址 http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意:(最小生成树裸题)有N个村庄,给出村庄两两之间的距离,要求铺设公路,使得任何两个村庄间都可 ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- HDU 1233 还是畅通工程(最小生成树)
传送门 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 【HDU - 1863】 畅通工程(并查集+最小生成树)
题干: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的 ...
最新文章
- 【Robot学院】一文读懂世界智能制造大趋势!
- 享有的意思是_“fuck you money”不是“x你钱”,真实意思却是这个
- javaMail操作QQ邮箱发送邮箱 Demo
- COGS 36. 求和问题
- SLF4J with Logback in a Maven Project | Mograblog
- 浅谈OpenCL之Platform API(2)
- [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
- JS取得RadioButtonList的Value,Text及选中值等信息
- objC 类名后圆括号的意义
- 用命令提示符使用MySQL
- sla java_Grafana中滑动窗口的Prometheus正常运行时间或SLA百分比
- java 计算百分比 保留两位小数
- JEOL:发布新的扫描电子显微镜JSM-IT700HR
- 基于马尔科夫链的关于CpG岛的模式识别分类学习器
- 一文教你秒懂晶体三极管与场效应晶体管选型的诀窍
- echarts报错 Unkown series surface
- FLIR E85/E95/T620/t610/T540/T530红外热像仪全齐
- c语言冒泡排序法代码(c语言冒泡排序法代码讲解)
- html上传文件时选取多文件
- 录音完成上传文件失败
热门文章
- ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页
- 一个分析“文件夹”选择框实现方法的过程
- 深度学习中的优化算法之MBGD
- CUDA Samples: Streams' usage
- C++11中nullptr的使用
- Ubuntu下内存泄露检测工具Valgrind的使用
- Artistic Style在windows下的使用(C/C++)
- OpenCV像素点处理
- 【视频】使用VLC采集摄像头,以RTSP协议发送流到网络上
- android 反编译_Box 黑科技——支持手机端反编译