P1111 修复公路

news2024/10/9 10:26:50

题目背景

AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。

题目描述

给出A地区的村庄数NN,和公路数MM,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)

输入格式

第11行两个正整数N,MN,M

下面MM行,每行33个正整数x, y, tx,y,t,告诉你这条公路连着x,yx,y两个村庄,在时间t时能修复完成这条公路。

输出格式

如果全部公路修复完毕仍然存在两个村庄无法通车,则输出-1−1,否则输出最早什么时候任意两个村庄能够通车。

输入输出样例

输入 #1复制

4 4
1 2 6
1 3 4
1 4 5
4 2 3

输出 #1复制

5

说明/提示

N \le 1000,M \le 100000N≤1000,M≤100000

x \le N,y \le N,t \le 100000x≤N,y≤N,t≤100000

1.该题是使用到了并查集加排序。

2.建议使用快排,因为快排时间复杂度不高,不会时间超限。

3.然后就是普普通通的并查集了,这里我之前卡到10分,没过是因为我再并查集里面是这样写的。

然后大部分都提示我MLE了,我以为是快排出现了错误,但是我只交了快排的代码是没有出现MLE的,我就找了一下,觉得可能这部分可以再优化一下。改成了下面这样子:

 

提交上去就全部AC了。

4.然后就是暴力去找是不是在一个集合,是不会出错的。

 

 代码如下:

#include<stdio.h>
#define N 1000+10
#define M 100010
typedef struct node
{
	int u;
	int v;
	int t;
}NODE;
NODE e[M]={0};
int n,m,k[N];
int quicksort(int left,int right)
{
	NODE t,temp=e[left];
	int i=left,j=right;
	if(left>right) return 0;
	while(i<j)
	{
		while(i<j&&temp.t<=e[j].t) j--;
		while(i<j&&temp.t>=e[i].t) i++;
		if(i<j)
		{
			t=e[i];e[i]=e[j];e[j]=t;
		}
	}
	e[left]=e[i];
	e[i]=temp;
	quicksort(left,i-1);
	quicksort(i+1,right);
}

int getf(int x)
{
	if(x==k[x]) return x;
	else return getf(k[x]);
}

int merge(int a,int b)
{
	int p,q;
	p=getf(a);
	q=getf(b);
	if(p!=q)
	{
		k[q]=k[p];
	}
}

int pd()
{
	int i,c=0;
	for(i=1;i<=n;i++)
		if(k[i]==i) c++;
	return c;
}

int main()
{
	int i;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		k[i]=i;
	}
	for(i=0;i<m;i++)
	{
		scanf("%d%d%d",&(e[i].u),&(e[i].v),&(e[i].t));
	}
	quicksort(0,m-1);
//	puts("after sorting:");
//	for(i=0;i<m;i++)
//		printf("%d %d %d\n",e[i].u,e[i].v,e[i].t);
	for(i=0;i<m;i++)
	{
		merge(e[i].u,e[i].v);
		if(pd()==1) 
		{
			printf("%d\n",e[i].t);
			break;
		}
	}
	if(i>=m) printf("-1\n");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python-123练习-04简单分支

文章目录1. 判断闰年2. 今年多少天3. 今天是第几天4. 判断奇偶数5. 计算整数 n 的阶乘6. 判断是否直角三角形7. 判断三角形并计算面积8. 出租车计费9. 一元二次方程求根10. 个税计算器11. 分期付款计算器12. 字符大小写转换1. 判断闰年 描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪…

学习HTTP协议,这一篇就够啦

HTTP协议一、什么是HTTP1.1 应用层协议1.2 HTTP1.3 HTTP协议的工作过程二、HTTP协议格式2.1 Fiddler抓包工具2.2 协议格式三、HTTP请求 (Request)3.1 认识 "方法" (method)3.1.1 GET 方法3.1.2 POST 方法3.1.3 GET和POST比较3.1.4 其他方法3.2 认识URL3.2.1 URL基本格…

Elasticsearch:使用 Node.js 将实时数据提取到 Elasticsearch 中(一)

Elasticsearch 是一个强大的 RESTful 搜索和分析引擎&#xff0c;能够处理越来越多的用例。 它将集中存储你的数据&#xff0c;以实现闪电般的快速搜索、微调相关性以及可轻松扩展的强大分析。 关于如何使用 Elastic Stack&#xff08;又名 ELK 堆栈&#xff09;将数据摄取到 E…

【C++编程调试秘籍】| 总结归纳要点(上)

文章目录一、编译器是捕捉缺陷的最好场合1 如何使用编译器捕捉缺陷二、在运行时遇见错误该如何处理1 该输出哪些错误信息2 执行安全检查则会减低程序效率&#xff0c;该如何处理呢3 当运行时遇到错误时&#xff0c;该如何处理四、索引越界1 动态数组2 静态数组3 多维数组5 指针…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的深度学习模型

目录给我推荐20个比较流行的nlp模型给我推荐20个比较流行的计算机视觉模型给我推荐20个比较流行的图像分类模型给我推荐20个比较流行的人脸识别模型给我推荐20个比较流行的实体识别模型给我推荐20个比较流行的语言识别模型给我推荐20个比较流行的激光雷达3D点云模型给我推荐20个…

计算机网络的一些常识

序 小白&#xff0c;啥也不会&#xff0c;所以要学习常识 快速总览 这个视频按照数据链路层——网络层——传输层——应用层的顺序&#xff0c;自下向上介绍的。虽然只有30分钟&#xff0c;但是挺全的&#xff0c;密度挺高的&#xff0c;而且小白友好。 计算机网络 Compute…

python学习|第一天

文章目录1.输出函数print2.浮点数输出3.数据类型转换4.运算符优先级5.列表对象list1.输出函数print #输出数字&#xff0c;直接输出 print(2023) print(2023.1)#输出字符串&#xff0c;要加单引号或者双引号(实际效果都是一样的)&#xff0c;输出后自动换行 print(hello 2023)…

华为CE系列和S系列交换机堆叠配置及mad检测

CE系列交换机堆叠配置&#xff1a; 第一台交换机配置&#xff1a; system-view immediately #不用每次都输入 commit提交了 sysname sw1 stack stack member 1 priority 105 stack member 1 domain 10 quit inter stack-port 1/1 port member-group inter 10GE 1/0/1 dis st…

使用Helm部署Wikijs

使用 Helm 部署 Wiki.js &#x1f4da;️ 参考文档: Wiki.js 官方文档 - 安装 - Kubernetes Wiki.js 使用 Helm 安装 Wiki.js 官方文档 - 安装 - 侧加载 官方教程 Kubernetes 开始使用 Helm Chart 在 Kubernetes 上安装 先决条件 Kubernetes 集群HelmPostgreSQL 数据库 ❗…

实习------数据库进阶

B树索引 什么是索引&#xff1f; MySQL官方对索引的定义为&#xff1a;索引就是用于实现数据的快速检索&#xff0c;由数据表中的一列或多列组合而成&#xff0c;索引实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表。索引的实现通常使用B树及其变种B树…

2022年终回顾与总结:螃蟹走路-冲,撞

工作赚钱&#xff0c;养家糊口 << 2022年对地球上的人类来说&#xff0c;肯定是刻骨铭心的纪元。对于微小的个人而言&#xff0c;感受是真真切切的。固然全球疫情危害了劳苦大众&#xff0c;但家庭给我的触动却是直接和深刻的。 这一年的轨迹被6月的一刀切成两片。上半年…

深度学习——序列模型(笔记)

1.序列数据&#xff1a; ①现实生活中有很多数据是有时序结构&#xff0c;比如电影的评分随时间的变化而变化。 ②统计学中&#xff0c;超出已知观测范围进行预测是外推法&#xff0c;在现有的观测值之间进行估计是内插法 2.统计工具&#xff1a;处理序列数据选用统计工具和新…

第一章:Mybatis与微服务注册

目录 一、SpringBoot整合MybatisPlus 创建自动生成代码子模块 创建商品服务子模块 二、SpringBoot整合Freeamarker 三、SpringBoot整合微服务&gateway&nginx 整合微服务之商品服务zmall-product 创建并配置网关gateway服务 安装配置SwitchHosts 安装配置Windo…

安装包部署prometheus+Grafana+node_exporter

部署prometheus 在192.168.11.141服务器操作 下载prometheus安装包 wget https://github.com/prometheus/prometheus/releases/download/v2.32.1/prometheus-2.32.1.linux-amd64.tar.gz 下载prometheus安装包 tar xvf prometheus-2.32.1.linux-amd64.tar.gz -C /usr/local…

OSPF的工作原理与性能优化

OSPF的3张表 OSPF的工作过程分为3个大步骤&#xff0c;分别是形成邻居关系&#xff0c;形成邻接关系&#xff0c;计算路由 OSPF建立邻居&#xff0c;收集LSA&#xff0c;收集完成形成邻接 用收集到的LSA&#xff0c;作为原材料&#xff0c;计算路由 完成这3大步骤&#xff0c;…

分享106个PHP源码,总有一款适合您

源码下载链接&#xff1a;https://pan.baidu.com/s/1Dyc3Qj8JRHJr2sECdEqGrA?pwdlscj 提取码&#xff1a;lscj PHP源码 分享106个PHP源码&#xff0c;总有一款适合您 采集参数 page_count 1 # 每个栏目开始业务content"text/html; charsetgb2312"base_url &q…

MySQL事务隔离级别详解

一、什么是事务 事务&#xff08;Transaction&#xff09;是由一系列对数据库中的数据进行访问与更新的操作所组成的一个程序执行单元。 在同一个事务中所进行的操作&#xff0c;要么都成功&#xff0c;要么就都失败。理想中的事务必须满足四大特性&#xff0c;这就是大名鼎鼎…

8种专坑同事的 SQL 写法,性能降低100倍,不来看看?

今天给大家分享几个SQL常见的“坏毛病”及优化技巧。 SQL语句的执行顺序&#xff1a; 1、LIMIT 语句 分页查询是最常用的场景之一&#xff0c;但也通常也是最容易出问题的地方。比如对于下面简单的语句&#xff0c;一般 DBA 想到的办法是在 type、 name、 create_time 字段上…

第二章:Swagger2

目录 背景介绍 什么是Swagger2 常用注解 SpringBoot整合Swagger2 生产环境下屏蔽Swagger2 修改Swagger2配置类 修改application.yml 使用maven package打包测试 运行测试 背景介绍 在团队开发中&#xff0c;一个好的 API 文档不但可以减少大量的沟通成本&#xff0c;还…

Linux系统的进程管理

文章目录Linux系统的进程管理1.查看进程2.父进程3.终止进程4.进程树Linux系统的进程管理 在LINUX中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号) 每个进程都可能以两种方式存在的。前台与后台&#xff0c;所谓前台进程就是用户目前的屏幕…