时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:3140

解决:1338

题目描述:
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
输入:
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。

当N为0时输入结束。

输出:
每个测试用例的输出占一行,输出全省畅通需要的最低成本。
样例输入:
3
1 2 1 0
1 3 2 0
2 3 4 0
3
1 2 1 0
1 3 2 0
2 3 4 1
3
1 2 1 0
1 3 2 1
2 3 4 1
0
样例输出:
3
1
0
来源:
2008年浙江大学计算机及软件工程研究生机试真题

思路:

采用并查集求解。

对道路排序时,第一排序原则是道路是否已经修好,修好的排在前面,第二排序原则是道路的成本。

先计算已经修好的道路的连通性,然后逐个添加维修好的道路,添加过程中记录新增道路的成本。最后的总成本就是答案。

代码:

#include <stdio.h>
#include <stdlib.h>#define N 100
#define M (N*(N-1)/2)typedef struct node {int x;int y;int d;int s;
} ROAD; int n;
int pre[N+1];
int count[N+1];
int num;void init()
{for (int i=1; i<=n; i++){pre[i] = i;count[i] = 1;}num = n;
}   int find(int i)
{           while (i != pre[i]) i = pre[i];return i;
}       int combine(int i, int j)
{           int a = find(i); int b = find(j);if (a != b){   if (count[a] > count[b]){pre[b] = a;count[a] += count[b];count[b] = 0;}else{pre[a] = b;count[b] += count[a];count[a] = 0;}num --;return 1;}elsereturn 0;
}int cmp(const void *a, const void *b)
{ROAD *x = (ROAD *)a;ROAD *y = (ROAD *)b;if (x->s != y->s)return y->s - x->s;elsereturn x->d - y->d;
}int main(void)
{int m, i;ROAD r[M];int sum;while (scanf("%d", &n) != EOF && n){m = n*(n-1)/2;for(i=0; i<m; i++)scanf("%d%d%d%d", &r[i].x, &r[i].y, &r[i].d, &r[i].s);qsort(r, m, sizeof(r[0]), cmp);init();sum = 0;for(i=0; i<m; i++){   if(combine(r[i].x, r[i].y) && r[i].s == 0)sum += r[i].d;if (num == 1)break;}   printf("%d\n", sum);}   return 0;
}
/**************************************************************Problem: 1028User: liangrx06Language: CResult: AcceptedTime:20 msMemory:928 kb
****************************************************************/

转载于:https://www.cnblogs.com/liangrx06/p/5084003.html

九度OJ 1028:继续畅通工程 (最小生成树)相关推荐

  1. 九度OJ——1028继续畅通工程

    题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修 ...

  2. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  3. Freckles - 九度 OJ 1144

    Freckles - 九度 OJ 1144 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: In an episode of the Dick Van Dyke show, l ...

  4. 打不开磁盘配额linux,九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)...

    题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...

  5. 非常可乐(九度 OJ 1457)

    非常可乐(九度 OJ 1457) 时间限制:1 秒 内存限制:32 兆 特殊判题:否 1.题目描述: 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是 seeyou 却不这么认为.因为每次当 see ...

  6. 九度OJ 题目1179:阶乘

    /********************************* * 日期:2013-2-8 * 作者:SJF0115 * 题号: 九度OJ 题目1179:阶乘 * 来源:http://ac.jo ...

  7. Leagal or Not - 九度 OJ 1448

    Leagal or Not - 九度 OJ 1448 题目 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: ACM-DIY is a large QQ group where man ...

  8. 九度OJ 题目1069:查找学生信息 随笔

    ** 九度OJ 题目1069:查找学生信息 ** 题目描述如下: 输入N个学生的信息,然后进行查询. 输入 输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息 ...

  9. 九度OJ 题目1203:IP地址

    /********************************* * 日期:2013-2-8 * 作者:SJF0115 * 题号: 九度OJ 题目1203:IP地址 * 来源:http://ac. ...

最新文章

  1. 银行计算机设备管理 总结,【2017年银行自助设备中心年终总结】_银行自助设备工作总结...
  2. 标准模板库(STL)学习指南之List链表
  3. 关于U盘安装ubuntu-18.04安装时候出现的grub-efi-amd64-signed的问题。
  4. c# 深拷贝各种实现方式
  5. linux 磁盘管理三部曲——(1)磁盘结构,认识分区
  6. promise入门的准备工作-(尚硅谷教程笔记)
  7. IEEE论文参考文献格式(bib)
  8. [部署系列之一]轻松搞定水晶报表9.2打包
  9. IEEE754的理解归纳
  10. 【PAT】PAT_1168_Prime_Day
  11. 数据结构c语言版袁和金答案,_数据结构_课程教学中的案例设计及应用_袁和金.pdf...
  12. java没提示_java运行不了,出现以下提示,如何解决。
  13. html5 图形组件,数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇
  14. 机器学习_2逻辑回归
  15. 高精地图编辑生成 opendrive OpenSCENARIO
  16. python常用语音识别库_Python入门 —— 06语音识别
  17. 1024程序员节福利第二波
  18. 2022-2028年中国激光加工设备制造行业市场调查研究及发展前景规划报告
  19. Android屏幕适配相关知识
  20. 互联网企业盈利模式全分析二

热门文章

  1. cad监控摄像头图例_家庭护卫兵:乐橙 TP2 智能摄像头
  2. linux日志服务是哪个,『学了就忘』Linux日志管理 — 2.日志服务rsyslogd
  3. 被解救的代码 - 代码即服务时代来了!
  4. Serverless 选型:深度解读 Serverless 架构及平台选择
  5. linux at自动挂化,linux的at定时任务的使用
  6. mysql命令窗口出现问号_mysql在控制台里出现中文问号问题
  7. java匿名启动线程_用java实现匿名内部类启动线程
  8. python1到1000的质数_python求第1000个质数值的简单示例
  9. 21世纪初最有影响力的20篇计算机视觉期刊论文 及 邓亚峰老师关于人脸识别方面总结
  10. 有三AI知识星球官宣,BAT等大咖等你来撩