8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)
题目链接:http://pat.zju.edu.cn/contests/ds/8-06
某地区经过对城镇交通状况的调查。得到现有城镇间高速道路的统计数据,并提出“畅通project”的目标:使整个地区不论什么两个城镇间都能够实现高速交通(但不一定有直接的高速道路相连,仅仅要互相间接通过高速路可达就可以)。现得到城镇道路统计表,表中列出了随意两城镇间修建高速路的费用,以及该道路是否已经修通的状态。现请你编敲代码。计算出全地区畅通须要的最低成本。
输入格式说明:
输入的第1行给出村庄数目N (1<=N<=100);随后的 N(N-1)/2 行相应村庄间道路的成本及修建状态:每行给出4个正整数,各自是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态 — 1表示已建,0表示未建。
输出格式说明:
输出全省畅通须要的最低成本。
例子输入与输出:
序号 | 输入 | 输出 |
1 |
3 1 2 1 0 1 3 2 0 2 3 4 0 |
3 |
2 |
3 1 2 1 0 1 3 2 0 2 3 4 1 |
1 |
3 |
3 1 2 1 0 1 3 2 1 2 3 4 1 |
0 |
PS:
用最小生成树的prim跑一下就好了。2333333……
代码例如以下:
#include <cstdio>
#include <cstring>
#include <iostream>
#define INF 0x3f3f3f3f
const int maxn = 117;
int m[maxn][maxn];
int vis[maxn], low[maxn];
int n;
int prim()
{vis[1] = 1;int sum = 0;int pos, minn;pos = 1;for(int i = 1; i <= n; i++){low[i] = m[pos][i];}for(int i = 1; i < n; i++){minn = INF;for(int j = 1; j <= n; j++){if(!vis[j] && minn > low[j]){minn = low[j];pos = j;}}sum += minn;vis[pos] = 1;for(int j = 1; j <= n; j++){if(!vis[j] && low[j] > m[pos][j]){low[j] = m[pos][j];}}}return sum;
}
int main()
{int a, b, c, d;while(~scanf("%d",&n)){int nn = n*(n-1)/2;memset(vis,0,sizeof(vis));memset(m,0,sizeof(m));for(int i = 1; i <= nn; i++){scanf("%d%d%d%d",&a,&b,&c,&d);if(d == 0)//未修建的才建图{m[a][b] = c;m[b][a] = c;}}int ans = prim();printf("%d\n",ans);}return 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
*/
8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)相关推荐
- 7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀
一:题目 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要 ...
- D38| DP理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
DP理论基础 重要知识点: 1.动规和贪心的区别:动规是由前一个状态推导出来的,而贪心是局部直接选最优的 2.动规五部曲: 1)确定dp数组(dp table)以及下标的含义 2)确定递推公式 3)d ...
- keras如何解决局部最小问题
keras如何解决局部最小问题 https://ruder.io/optimizing-gradient-descent/index.html#rmsprop keras如何解决局部最小问题 API ...
- hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...
- hdu4122 制作月饼完成订单的最小花费
题意: 有一个加工厂加工月饼的,这个工厂一共开业m小时,2000年1月1日0点是开业的第一个小时,每个小时加工月饼的价钱也不一样,然后每个月饼的保质期都是t天,因为要放在冰箱里保存,所以在 ...
- ZOJ3715 竞选班长求最小花费
题意: 有n个小朋友竞选班长,一号想当班长,每个人都必须选择一个人当班长,并且不可以选择自己,并且每个人都有一个权值ai,这个权值就是如果1想让这个人改变主意选择自己当班长就得给他ai个糖 ...
- 在数组中找到一个局部最小的位置
题目 定义局部最小的概念.arr长度为1时,arr[0]是局部最小.arr的长度为N(N>1)时,如果arr[0] < arr[1],那么arr[0]是局部最小:如果arr[N-1] &l ...
- LeetCode-动态规划基础题-746. 使用最小花费爬楼梯
描述 746.使用最小花费爬楼梯 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始). 每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应 ...
- 1230: 最小花费(spfa)
1230: 最小花费 时间限制: 1 Sec 内存限制: 128 MB 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除 ...
- LeetCode Algorithm 746. 使用最小花费爬楼梯
746. 使用最小花费爬楼梯 Ideas 首先确定题目类型,爬楼梯问题,并且给定了状态转移的限制,其实就已经可以确定状态转移方程了. 然后题目说可以从下标为0或下标为1的台阶开始爬,所以我们可以定义两 ...
最新文章
- RadASM的测试工程!
- pytest接口测试之fixture传参数request
- AR智能提升工业效率的4大场景与应用实践!
- ztree.js的使用整理
- Python基础:一起来面向对象 (二) 之搜索引擎
- vs2013和mysql连接_安装VS2013后与数据库的连接问题
- PyCharm之python书写规范--消去提示波浪线
- 高效程序员的 7 项技能
- Python中的错误处理
- 取代 Postman + Swagger!这款神器功能更强大,界面更炫酷!
- vue+vue-cli2+webpack配置资源cdn
- vue : 无法加载文件 D:\Program Files\nodejs\vue.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsof t.com/fwlin
- 按键精灵手机助手php通讯,按键精灵手机助手教程_按键精灵手机助手怎么连接手机...
- 在window10中怎样连接扫描仪,扫描证件
- 高通X12平台XO信号干扰灵敏度的解决方案
- 构词法重新辨析triweekly与entrance
- win10计算机属性管理打不开,win10无法打开设置应用的两种解决方法【图文】
- 中台建设:中台有效落地的6脉神剑
- ipad/iphone的浏览器,为啥可以播放优酷土豆等在线视频
- Android之获取移动网络ip