文章目录

  • 1. 题目描述
  • 2. 解题思路
  • 3. 代码实现
  • 4. 时间复杂度

题目链接:AcWing1012.友好城市

1. 题目描述

Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的 NNN 个城市。

北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。

每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。

编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。

输入格式
第 111 行,一个整数 NNN ,表示城市数。

第 222 行到第 n+1n+1n+1 行,每行两个整数,中间用 111 个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。

输出格式
仅一行,输出一个整数,表示政府所能批准的最多申请数。

数据范围
1≤N≤50001 \leq N \leq 50001≤N≤5000,
0≤xi≤100000 \leq x_i \leq 100000≤xi​≤10000

输入样例:

7
22 4
2 6
10 3
15 12
9 8
17 17
4 2

输出样例:

4

2. 解题思路

  • 条件1:每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。
  • 条件2:每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市、政府决定避免任意两条航道交叉。(任意两条航线不相交)
  • 目标:被批准的申请尽量多。

假设城市用x和一些大写字母表示:(城市的位置是乱序的,不是按顺序排好的)

北岸:x x x x x x A x x x B …
南岸:x x x D x x C x x x x …

其中 AAA 和 CCC 是友好城市,BBB 和 DDD 是友好城市。
对南岸的城市位置进行由小到大排序可得:
(1)
北岸:x x x A x x x x B x x …
南岸:x x C D x x x x x x x …

那么,由上面的排序情况可知 ACACAC 和 BDBDBD 都可申请。
若排完序后的结果如下:
(2)
北岸:x x x B x x x x A x x …
南岸:x x C D x x x x x x x …

则只有一个请求可被满足。

由此可见,南岸的城市排完序后,最优方案中北岸的城市一定是单调的,若不单调,则一定有交点,对应于情况(2)。

所以对南岸的城市排完序后,对北岸的城市求一个最长上升子序列即可得到结果。

最长上升子序列的求法可参考:AcWing895_最长上升子序列 。

3. 代码实现

#include <iostream>
#include <algorithm>using namespace std;typedef pair<int, int> PII;const int N = 5010;int n;
PII a[N];
int f[N];int main()
{scanf("%d", &n);for (int i = 1; i <= n; i ++ )scanf("%d%d", &a[i].first, &a[i].second);sort(a + 1, a + 1 + n);int res = 0;for (int i = 1; i <= n; i ++ ){f[i] = 1;for (int j = 1; j < i; j ++ )if (a[j].second < a[i].second)f[i] = max(f[i], f[j] + 1);res = max(res, f[i]);}printf("%d\n", res);return 0;
}

4. 时间复杂度

排序:O(nlogn)O(nlogn)O(nlogn)。
求最长上升子序列:O(n2)O(n^2)O(n2)。
总体:O(n2)O(n^2)O(n2)。

AcWing1012_友好城市相关推荐

  1. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  2. AC日记——友好城市 洛谷 P2782

    题目背景 无 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.没对友好城市都向政府申请在河上 ...

  3. 【洛谷 2782】友好城市

    题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申请在河上开辟一条直线航 ...

  4. P2782 友好城市

    题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申请在河上开辟一条直线航 ...

  5. 信息学奥赛一本通(1263:【例9.7】友好城市)

    1263:[例9.7]友好城市 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 7660     通过数: 4419 [题目描述] Palmia国有一条横贯东西的大 ...

  6. 友好城市(信息学奥赛一本通-T1263)

    [题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同. 每对友好城市都向政府申请 ...

  7. 十大司机如厕友好城市出炉:苏州/杭州/成都位居前三

    4月1日消息,近日,高德地图发布<2022全国公共厕所图鉴>(下称,<图鉴>),依据近百个城市2021年公共厕所线上搜索和导航数据,选出了十大厕所数字化城市.十大司机如厕友好城 ...

  8. 【例9.7】友好城市

    [例9.7]友好城市 链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1263 时间限制: 1000 ms         内存限制: 65536 ...

  9. “中国儿童友好城市”倡议书发布 吁智慧城市以“儿童为本”

    中国正处在快速城镇化进程中,研究机构预测,到2030年城市人口将突破10亿.这意味着更多的中国儿童将在城市环境中出生和成长,而城市设施和服务也需要因应新形势而做出改变. 10日下午,一场聚集中国.瑞典 ...

最新文章

  1. Centos7安装nginx教程!超简单
  2. JavaScript - 动态数据
  3. 运行Java web时遇到的错误
  4. java个人中心修改界面怎么整_怎么对个人中心页面访问进行控制
  5. 【转载】使用缓存的9个误区(上)
  6. 输入问题C++字符数组越界问题的一个案例分析
  7. 装箱和拆箱、类型比较
  8. iOS修改手游服务器数据,IOS免越狱游戏存档修改教程】成长王国Grow Kingdom为例
  9. Dell台式计算机BIOS放电,戴尔bios设置电池修复 笔记本电脑电池bios设置图解方法...
  10. 【 Android 10 生物识别 】系列 -- Fingerprint_指纹录入流程
  11. i3cpu驱动xp_Intel英特尔Core i3/Core i5/Core i7系列CPU核芯显卡驱动 32Bit
  12. 毕索大学计算机科学怎么样,毕索大学的计算机硕士如何
  13. java switch语句_Java switch语句
  14. LINGO Error Code 122 和 237 出现原因及其解决方法
  15. 给定平面上任意三个点的坐标(x​1​​,y​1​​)、(x​2​​,y​2​​)、(x​3​​,y​3​​),检验它们能否构成三角形
  16. 计算机专业在创新方面的表现,计算机专业本科论文
  17. java 自己实现 解析处理user-agent 获取设备信息 ip-ua转化归因
  18. java编译时为什么总找不到文件,javac编译时找不到文件的问题和运行项目找不到指定类问题...
  19. 【笔试题】嵌入式软件开发——嵌入式软件工程师经典笔试题
  20. Sql server 2016数据库卸载

热门文章

  1. 【编程游戏】划拳机器人比赛
  2. windows下cmd中输入nvidia-smi显示不是内部或外部命令解决方法!
  3. SoC-按键控制led
  4. 难道 我有这方面的天赋
  5. 对Excel表中的大学生薪酬数据分析(Python)
  6. 数据库管理系统(DBMS)的主要功能、组成以及数据存取的过程
  7. #SAS学习-数据加工处理-中
  8. python mssql varbin_pymssql数据库操作MSSQL2005实例分析
  9. 欣赏一个人,始于颜值,敬于才华,合于性格,久于善良,终于人品
  10. java异常统一处理_Java 代码中的全局异常处理