浙江大学机试--继续畅通工程
时间:2019-01-31
本文章向大家介绍浙江大学机试--继续畅通工程,主要包括浙江大学机试--继续畅通工程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:牛客网链接
概述: 给定n个村庄,然后给出他们之间的路的长度和代价,和是否修好,问如何修路才能让代价最小,输出最小代价。
**思路:**本题采用最小生成树 Kruskal算法(并查集)。相关的知识可以百度一下。注释中写思路。
#include <iostream>
#include <algorithm>
using namespace std;
//用于并查集中使用,存放父节点
int father[2000];
struct Edge{
int a, b, status, cost;
};
bool cmp(Edge a, Edge b)
{
if(a.status == b.status)
{
return a.cost < b.cost;
}
else
{
return a.status > b.status;
}
}
//查找父节点
int find_father(int x)
{
while(x != father[x])
{
x = father[x];
}
return x;
}
int main()
{
int n;
Edge edge[50000];
while(scanf("%d", &n) != EOF && n != 0)
{
for(int i = 1; i <= n * (n - 1) / 2; i++)
{
scanf("%d%d%d%d",&edge[i].a,&edge[i].b,&edge[i].cost,&edge[i].status);
}
sort(edge + 1, edge + 1 + n * (n -1) / 2, cmp);
int ans = 0;
for(int i = 1 ; i <= n ; i++)father[i] = i;
for(int i = 1; i <= n * (n - 1) / 2; i++)
{
int a = find_father(edge[i].a);
int b = find_father(edge[i].b);
if( a != b)
{
father[a] = b;
if(edge[i].status == 0)
{ans += edge[i].cost;
//cout << "链接了" << edge[i].a <<" 和" << edge[i].b <<"花费"<< edge[i].cost<< endl;
} //只有状态为0才参与计算
}
}
printf("%d\n",ans);
}
}
- python爬虫人门(10)Scrapy框架之Downloader Middlewares
- 11.python线程
- Numpy 修炼之道 (8)—— 常用函数
- Numpy 修炼之道 (7)—— 形状操作
- 洛谷P3391 【模板】文艺平衡树(Splay)(FHQ Treap)
- 12.python进程协程异步IO
- POJ3622 Gourmet Grazers(FHQ Treap)
- 洛谷P3201 [HNOI2009]梦幻布丁
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
- 自然语言处理基础知识1. 分词(Word Cut)2. 词性标注(POS Tag)3.自动标注4.文本分类5.评估6.从文本提取信息7.分析句子结构《python自然语言处理》各章总结:
- 洛谷P3384 【模板】树链剖分
- 洛谷P2147 [SDOI2008]Cave 洞穴勘测
- linux基础
- 洛谷P3178 [HAOI2015]树上操作
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Angular里使用rxjs的异步API - Observable
- 自动化监控Oracle表空间并发送报警
- Angular里的消息(Message)显示
- Angular应用内路由(In App Route)的最佳实践
- Angular应用的路由指令RouterLink
- ctfhub-信息泄泄露_备份文件下载
- Angular In-memory Web API使用介绍
- 攻防世界-php_rce
- 无法添加某个relationship给SAP CRM Product category的一个可能原因
- 记一次DataGuard SWITCHOVER_STATUS 状态为RESOLVABLE GAP的处理
- ABAP数据库表的元数据
- ctfshow-萌新赛
- VC++ libcurl FTP上传客户端程序
- Oracle RAC变更实验之修改11gR2+公网IP地址(网段不变)
- C# 纯控制台创建一个全屏窗口