练习题(2.10)

问题描述

有一个 SNS 被 NN 个用户使用,他们的编号从 11 到 NN

在这个 SNS 中,两个用户可以成为朋友

友谊是双向的;如果用户 X 是用户 Y 的朋友,那么用户 Y 也一定是用户 X 的朋友。

目前,在 SNS 上有 MM 对朋友关系,第 ii 对由用户 AiAi 和用户 BiBi 组成。

确定可以执行以下操作的最大次数:

  • 操作:选择三个用户 X、Y 和 Z,使得 X 和 Y 是朋友,Y 和 Z 是朋友,但 X 和 Z 不是朋友。让 X 和 Z 成为朋友。

约束条件

  • 2≤N≤2×1052≤N≤2×105

  • 0≤M≤2×1050≤M≤2×105

  • 1≤Ai<Bi≤N1≤Ai<BiN

  • 这些对  是不同的。

    (Ai,Bi)(Ai,Bi)

  • 所有输入值都是整数。

输入

输入以以下格式从标准输入给出:

NNMMA1A1B1B1⋮⋮AMAMBMBM

输出

输出答案。

示例 1

InputcopyOutputcopy
`4 3
1 2
2 3
1 4`3

可以发生三次新的朋友关系,方法如下:

  • 用户  和他们的朋友(用户 )的朋友(用户 )成为朋友

    11

    22

    33

  • 用户  和他们的朋友(用户 )的朋友(用户 )成为朋友

    33

    11

    44

  • 用户  和他们的朋友(用户 )的朋友(用户 )成为朋友

    22

    11

    44

不会有四次或更多的新朋友关系。

示例 2

InputcopyOutputcopy
3 00

如果没有初始的朋友关系,就不会发生新的朋友关系。

示例 3

InputcopyOutputcopy
`10 8
1 2
2 3
3 4
4 5
6 7
7 8
8 9
9 10`12

错误代码:不知道错哪了求大佬教一教QWQ

#include<iostream>
#include<algorithm>
using namespace std;
const int M = 2e5 + 5;
int NEXT[M];
int vis[M], bj[M];
int n, m, u, v;
int ans = 0;
int val[1000];
int find(int x) {if (x != NEXT[x])return NEXT[x] = find(NEXT[x]);return NEXT[x];
}
void Union(int x, int y) {if (find(x) != find(y))NEXT[find(y)] = find(x);
}
int sy(int a[], int x,int n) {for (int i = 0; i < n; i++) {if (a[i] == x)return 1;}return 0;
}
int main() {cin >> n >> m;for (int i = 0; i <= n; i++)NEXT[i] = i;for (int i = 1; i <= m; i++) {cin >>u >> v;Union(u, v);}for (int i = 1; i <= n; i++)vis[i] = find(i);int k = 1;for (int i = 1; i <= n; i++) {if (!sy(bj, vis[i], k)) {val[k - 1] = i - 1;bj[k++] = vis[i];}}val[k-1] = n;for (int i = 0; i < k - 1; i++) {int c = val[i + 1] - val[i];ans += c * (c - 1) / 2;}cout << ans - m;return 0;
}

昨天这个错题的错误点

1.数据类型错误,题中的数据量很大可能会超过int

2.sy函数这种遍历方式效率太低

下面是改进后的代码:

#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int M = 2e5 + 5;
int NEXT[M];
ll vis[M], bj[M];
ll n, m, u, v;
ll ans = 0;
ll val[M];
int find(int x) {if (x != NEXT[x])return NEXT[x] = find(NEXT[x]);return NEXT[x];
}
void Union(int x, int y) {if (find(x) != find(y))NEXT[find(y)] = find(x);
}
int main() {cin >> n >> m;for (int i = 0; i <= n; i++)NEXT[i] = i;for (int i = 1; i <= m; i++) {cin >>u >> v;Union(u, v);}for (int i = 1; i <= n; i++) {int root = find(i);vis[root]++;}for (int i = 0; i <= n; i++) {ans += vis[i] * (vis[i] - 1) / 2;}cout << ans - m << endl;return 0;
}

数据类型只要进行更改就行了,主要还是计算每个连通块(就是由几个成员构成的整体,就比如7个人可以分成3个人和4个人的小团体,而这两个小团体之间没有联系)的成员个数的优化。昨天使用的vis数组存储根结点的,在找出根结点不同的位置(也就小团体断掉的位置),再通过这个位置之差来求出每个小团体的关系的最大数量。改进后直接通过循环,如果根结点相同,数组上对应下标的数值就自增1,这样就可以直接反应出每个连通块的人数

Background

模板题,无背景。

2019.12.12 更新数据,放宽时限,现在不再卡常了。

Description

给出项数为 nn 的整数数列 a1…na1…n

定义函数 f(i)f(i) 代表数列中第 ii 个元素之后第一个大于 aiai 的元素的下标,即 f(i)=min⁡i<j≤n,aj>ai{j}f(i)=mini<jn,aj>ai{j}。若不存在,则 f(i)=0f(i)=0。

试求出 f(1…n)f(1…n)。

Input

第一行一个正整数 nn

第二行 nn 个正整数 a1…na1…n

Output

一行 nn 个整数表示 f(1),f(2),…,f(n)f(1),f(2),…,f(n) 的值。

Sample 1

InputcopyOutputcopy
`5
1 4 2 3 5`2 5 4 5 0

Hint

【数据规模与约定】

对于 30%30% 的数据,n≤100n≤100;

对于 60%60% 的数据,n≤5×103n≤5×103 ;

对于 100%100% 的数据,1≤n≤3×1061≤n≤3×106,1≤ai≤1091≤ai≤109。

**思路:**用数组模拟模拟单调栈,因为题目要求的是找到这个数右边第一比他大的数,所以只要让右边的数先进栈那么右边的数就都访问过了,如果当前元素比他右边的第一个元素(也就是当前栈顶元素)大的话就让他出栈,直到出现比他大的数为止,否则就是0,因此我们要倒序访问数组

源代码:

#include<iostream>
using namespace std;
const int N = 3e6 + 5;
int n, k;
int a[N], f[N], stack[N];
int main() {cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];for (int i = n; i >= 1; i--) {while (stack[1] != 0 && a[stack[k]] <= a[i])stack[k--] = 0;if (stack[1] == 0)f[i] = 0;elsef[i] = stack[k];stack[++k] = i;}for (int i = 1; i <= n; i++)cout << f[i] << " ";return 0;
}

描述(由于AI翻译大部分i翻译成了我)

Farmer John's N (1 <= N <= 100,000) 奶牛,方便地编号为 1...N,再次站成一排。奶牛 i 的身高为 H_i (1 <= H_i <= 1,000,000)。

每头奶牛都向左看向索引数较高的奶牛。如果我们< j 和 H_i < H_j,我们就说奶牛 i '仰望' 奶牛 j。对于每头奶牛 i,FJ 想知道奶牛 i 所仰望的排队第一头奶牛的索引。

注意:大约 50% 的测试数据将具有 N <= 1,000。

约翰的 N(1≤N≤105)N(1≤N≤105) 头奶牛站成一排,奶牛 我 的身高是 H我(1≤H我≤106)H我(1≤H我≤106)。 现在,每只奶牛都在向右看齐。 对于奶牛 我,如果奶牛 jj 满足 i<j<j 且 H我<HjH我<Hj,我们可以说奶牛 我 可以仰望奶牛 jj。 求出每只奶牛离她最近的仰望对象。

输入

输入

  1. 第 1 行:单个整数:N
  • 第 2 行...N+1:第 i+1 行包含单个整数:H_i

第 11 行输入 NN,之后每行输入一个身高 H我H我

输出

  • 1 号线...N:第 i 行包含一个整数,表示一头奶牛到 i 所查找的奶牛的最小索引。如果不存在这样的 cow,则打印 0。

共 NN 行,按顺序每行输出一只奶牛的最近仰望对象,如果没有仰望对象,输出 00。

示例 1

输入复制输出复制
`6
3
2
6
1
1
2``3
3
0
6
6
0`

提示

FJ 有六头奶牛,身高分别为 3、2、6、1、1 和 2。

奶牛 1 和 2 都仰望奶牛 3;奶牛 4 和 5 都仰望奶牛 6;奶牛 3 和 6 不仰望任何奶牛。

【输入说明】66 头奶牛的身高分别为 3,2,6,1,1,2。

【输出说明】奶牛 #1,#2 仰望奶牛 #3,奶牛 #4,#5 仰望奶牛 #6,奶牛 #3 和 #6 没有仰望对象。

【数据规模】

对于 20%20% 的数据:1≤N≤101≤N≤10;

对于 50%50% 的数据:1≤N≤1031≤N≤103;

对于 100%100% 的数据:1≤N≤105,1≤H我≤1061≤N≤105,1≤H我≤106。

和上面一题写法一模一样

源代码:

#include<iostream>
using namespace std;
const int N = 1e5 + 5;
int n, k;
int h[N], f[N], stack[N];
int main() {cin >> n;for (int i = 1; i <= n; i++)cin >> h[i];for (int i = n; i >= 1; i--) {while (stack[1] != 0 && h[stack[k]] <= h[i])stack[k--] = 0;if (!stack[1])f[i] = 0;elsef[i] = stack[k];stack[++k] = i;}for (int i = 1; i <= n; i++)cout << f[i] << endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将 AMD Zynq™ RFSoC 扩展到毫米波领域

目录 将 AMD Zynq™ RFSoC 扩展到毫米波领域Avnet XRF RFSoC 系统级模块适用于 MATLAB 的 Avnet RFSoC Explorer 工具箱5G mmWave PAAM 开发平台突破性的宽带毫米波波束成形特征&#xff1a;OTBF103 Mathworks Simulink 模型优化毫米波应用中的射频信号路径 用于宽带毫米波上/下…

征程 6 相比征程 5 对算子支持扩展的具体案例讲解

引言 征程 6 相比于征程 5&#xff0c;在整体架构上得到了升级&#xff0c;相对应的&#xff0c;算法工具链的算子支持也得到了扩充&#xff0c;无论是算子支持的数量&#xff0c;还是 BPU 约束条件&#xff0c;征程 6 都有明显的加强&#xff0c;这就使得过去在征程 5 上无法…

蓝桥杯C语言组:博弈问题

概述 在编程的世界里&#xff0c;博弈问题就像是一场智力的“斗地主”&#xff0c;双方&#xff08;或者多方&#xff09;使出浑身解数&#xff0c;只为赢得最后的胜利。而蓝桥杯C语言比赛中的博弈问题&#xff0c;更是让无数参赛者又爱又恨的存在。它们就像是隐藏在代码森林中…

BS架构(笔记整理)

楔子.基本概念 1.在网络架构中&#xff1a; 服务器通常是集中式计算资源&#xff0c;负责处理和存储数据&#xff1b;客户机是请求这些服务的终端设备&#xff0c;可能是个人电脑或移动设备&#xff1b;浏览器则是客户机上用来与服务器交互的工具&#xff0c;负责展示网页内容…

【动态规划篇】:动态规划解决路径难题--思路,技巧与实例

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;动态规划篇–CSDN博客 文章目录 一.动态规划中的路径问题1.核心思路2.注意事项 二.例题讲解…

【Linux】深入理解linux权限

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 目录 前言 一、权限是什么 二、用户和身份角色 三、文件属性 1. 文件属性表示 2. 文件类型 3. 文件的权限属性 四、修改文件的权限属性和角色 1. …

嵌入式linux系统中VIM编辑工具用法与GCC参数详解

大家好,今天主要给大家分享一下,如何使用linux系统中的VIM编辑工具和GCC的参数详解。 第一:安装VIM 命令:sudo apt get install vim 第二:工作模式 普通模式:打开一个文件时的默认模式,按ESC返回普通模式 插入模式:i/o/a进入插入模式,不同在于在光标前后插入 可视…

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 &#x1f31f;&#x1f31f;本期讲解关于HTMLCSSJavaScript的基础知识&#xff0c;小编带领大家简单过一遍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 …

蓝桥杯---数青蛙(leetcode第1419题)

文章目录 1.题目重述2.例子分析3.思路分析4.思路总结5.代码解释 1.题目重述 这个题目算是模拟这个专题里面的一类比较难的题目了&#xff0c;他主要是使用crock这个单词作为一个整体&#xff0c;让我们确定&#xff1a;给你一个字符串&#xff0c;至少需要多少个青蛙进行完成鸣…

WidowX-250s 机械臂学习记录

官网教程&#xff1a;Python Demos — Interbotix X-Series Arms Documentation 系统&#xff1a;Ubuntu20.04&#xff0c;ROS1 相关的硬件编译配置跳过 Python Demos 这些演示展示了使用 Interbotix Python Arm 模块的各种方法&#xff08;点击链接查看完整的代码文档&…

【CubeMX-HAL库】STM32F407—无刷电机学习笔记

目录 简介&#xff1a; 学习资料&#xff1a; 跳转目录&#xff1a; 一、工程创建 二、板载LED 三、用户按键 四、蜂鸣器 1.完整IO控制代码 五、TFT彩屏驱动 六、ADC多通道 1.通道确认 2.CubeMX配置 ①开启对应的ADC通道 ②选择规则组通道 ③开启DMA ④开启ADC…

集成右键的好用软件,支持多线程操作!

今天给大家分享一个超级实用的小工具&#xff0c;真的能帮上大忙呢&#xff01;这个软件是吾爱大神无知灰灰精心制作的&#xff0c;简直就是图片转换界的“小能手”。 它能一键把webp格式的图片转换成png格式&#xff0c;而且速度超快&#xff0c;完全不输那些付费的软件&#…

CSDN 博客之星 2024:肖哥弹架构的社区耕耘总结

#博客之星2024年度总评选—主题文章创作# CSDN 博客之星 2024&#xff1a;肖哥弹架构的社区耕耘总结 肖哥弹架构 是一位专注于技术分享和社区建设的博客作者。今年&#xff0c;我荣幸地再次入选CSDN博客之星TOP300&#xff0c;这不仅是对我过去努力的认可&#xff0c;更是对未…

【分布式理论7】分布式调用之:服务间的(RPC)远程调用

文章目录 一、RPC 调用过程二、RPC 动态代理&#xff1a;屏蔽远程通讯细节1. 动态代理示例2. 如何将动态代理应用于 RPC 三、RPC序列化与协议编码1. RPC 序列化2. RPC 协议编码2.1. 协议编码的作用2.2. RPC 协议消息组成 四、RPC 网络传输1. 网络传输流程2. 关键优化点 一、RPC…

综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab)

基于随机变异系数-TOPSIS组合法的综合评价模型 代码获取私信回复&#xff1a;综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型&#xff08;Matlab&#xff09; 一、引言 1.1、研究背景与意义 在现代社会&#xff0c;随着信息量的不断增加和数据复杂性的提升&#…

采用分步式无线控制架构实现水池液位自动化管理

以下是基于巨控GRM241Q-4D4I4QHE模块的完整技术方案&#xff0c;采用分步式无线控制架构实现水池液位自动化管理&#xff1a; 一、系统架构设计 硬件部署 山顶单元 GRM241Q模块&#xff08;带4G功能&#xff09; 液位计&#xff08;4-20mA&#xff09; 功能&#xff1a;实时采…

Vue设计模式到底多少种?

Vue设计模式到底多少种&#xff1f; 很多同学问&#xff0c;Vue到底有多少种设计模式&#xff1f;&#xff1f;各个模式到底是什么意思&#xff1f;&#xff1f;又各自适合什么场景&#xff1f;&#xff1f; 这里我给大家直接说下&#xff0c;Vue的设计模式没有一个固定的数值…

[LeetCode] day19 454. 四数相加 II

题目链接 题目描述 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&…

查看二进制程序内的 .interp 段

synopsis 可以使用 readelf &#xff0c;objdump&#xff0c;hexdump等工具查看 二进制程序内的.interp段信息。 1. 使用readelf查看.interp段 readelf 是一个查看ELF&#xff08;Executable and Linkable Format&#xff09;文件信息的工具&#xff0c;特别适合查看ELF头和…

【时时三省】(C语言基础)基础习题1

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 1.什么是程序&#xff1f;什么是程序设计 程序是为实现特定目标或解决特定问题&#xff0c;用计算机能理解和执行的语言编写的一系列指令的集合。 程序设计是问题分析&#xff0c;设计算法…