2024 ICPC ShaanXi Provincial Contest —— C. Seats(个人理解)拓扑+dfs

2024 ICPC ShaanXi Provincial Contest —— C. Seats(个人理解)拓扑+dfs

先放个传送门
https://codeforces.com/gym/105257/problem/C

在这里插入图片描述
————————————————————————————————————

思路

可以看到,每一个编号可能会被很多人向往,但每一个编号上的人只会向往一个座位。

再有可以发现,如果根据每个人的期望建边之后成环了,那么这个环内所有人都可以实现向往,但任何一条链从环出发或者终点到环的情况是都不可能实现的。环只能自给自足,而与环相接的链上的人必然不可能实现向往!

那么排除上面必死的链之外,还有什么链是可以实现的?不难发现,如果终点在 n+1 到 2*n 的链是都可以实现的。并且这些链之间是不会互相干扰的。

那么我们的目标就变成了:

①统计所有环的节点数

②统计终点在右半边的所有最长链长度和

详细步骤请看代码实现:

#include<bits/stdc++.h>
#include<assert.h>
using namespace std;
typedef long long ll;const ll M = 2e5 + 20;
const ll inf = 1e9 + 5;
const ll P = 1e9 + 7;//vector<int>g[M];
vector<int>gb[M];//反向建边ll n;
ll a[M];bitset<M>loop;//1表示属于环,0不属于
ll in[M];//每个节点的入度
ll ans = 0;//dfs从终点反着找最长链
int dfs(int x)
{if (loop[x])//环只能自给自足return 0;int maxx = 0;for (auto& y : gb[x])maxx = max(maxx, dfs(y));return maxx + 1;
}void topo()
{queue<int>q;for (int i = 1; i <= n; i++)if (in[i] == 0)q.push(i);while (!q.empty()){int ttt = q.front();q.pop();loop[ttt] = 0;//入度为0说明肯定不是环if (a[ttt] > n)//到右半边的不用管continue;if (--in[a[ttt]] == 0)//产生的新的入度为0的点加入队列q.push(a[ttt]);}
}void solve()
{cin >> n;//先进行录入for (int i = 1; i <= n; i++){cin >> a[i];gb[a[i]].push_back(i);//反向建边in[a[i]]++;//处理入度}for (int i = 1; i <= n; i++)loop[i] = 1;//拓扑排序来排除环以外的点topo();//在环里的每个人都可以互相交换for (int i = 1; i <= n; i++)if (loop[i])ans++;//反着找以 n+1 到 n 为终点的最长链for (int i = n + 1; i <= 2 * n; i++)ans += dfs(i) - 1;//减去多余的一个cout << ans << '\n';
}int main()
{std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//cout << fixed << setprecision(4);int T = 1;//cin >> T;while (T--)solve();return 0;
}

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

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

相关文章

Vision Based Navigation :针对航天领域的基于视觉导航机器学习应用生成训练数据集

2024-09-18 由欧洲空间局主导&#xff0c;由空客防务与空间公司参与创建Vision Based Navigation &#xff0c; 为空间任务中的基于视觉导航&#xff08;VBN&#xff09;机器学习应用生成训练数据集。 目前遇到的困难和挑战 1、数据集的可用性和充分性&#xff1a; 挑战&#x…

BFS 解决多源最短路问题

文章目录 多源BFS542. 01 矩阵题目解析算法原理代码实现 1020. 飞地的数量题目解析算法原理 1765. 地图中的最高点题目解析算法原理代码实现 1162. 地图分析题目解析算法原理代码实现 多源BFS 单源最短路&#xff1a; 一个起点、一个终点 多源最短路&#xff1a; 可以多个起点…

9.安卓逆向-安卓开发基础-安卓四大组件2

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信。 工…

[云服务器13] 如何正确选择云服务器?

【非广告&#xff0c;仅提供建议&#xff0c;没有强制消费引导】 这期我们不讲搭建教程了&#xff0c;因为我想到前面12篇的教程&#xff0c;有关套餐配置的教程好像都有点敷衍…… 所以这期我们主要来说一说服务器的配置选择和不同配置的应用场景。 网站: 雨云 打开后&…

基于ZigBee的农业大棚信息采集系统设计

过去的农业大棚种植中大多需要依靠经验来实现浇水施肥等工作&#xff0c;无法根据天气的变化做出顺应的改变&#xff0c;也就造成了大棚内种植农作物的产量和质量很难得到保证。伴随着物联网与农业种植的结合&#xff0c;基于ZigBee通信和传感器等技术开发一款能监测大棚内环境…

Linux:路径末尾加/和不加/的区别

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 普通文件操作 首先说明这个问题只会出现在目录和符号链接中&#xff0c;因为如果想要索引普通文件但却在路径末尾加/则会出现错误&#xff0c;如例1所示。 # 例1 zhang…

free源码

文章目录 free源码调试main_arena结构&#xff1a;free_hooktcachetcache的结构free_chunk进入tcache&#xff1a; fastbinunlink 合并top free源码调试 main_arena结构&#xff1a; 整体看一下main_arena的结构&#xff1a; free_hook free_hook&#xff0c;在glibc-2.3…

在 Windows 11 中,可以通过修改注册表来更改系统的自动更新时间设置

regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings FlightSettingsMaxPauseDays 36524

AI少女/HS2甜心选择2 仿崩铁人物卡全合集打包

内含AI少女/甜心选择2 仿崩铁【崩坏 星穹铁道 】角色卡全合集打包共6张 内含&#xff1a;布洛妮娅镜流卡芙卡希儿停云银狼 下载地址&#xff1a; https://www.51888w.com/375.html 部分演示图&#xff1a;

项目第六弹:虚拟机管理模块、路由匹配模块

项目第六弹&#xff1a;虚拟机管理模块、路由匹配模块 一、虚拟机管理模块的设计1.什么是虚拟机&#xff1f;2.借助MySQL来理解一下3.如何整合&#xff1f;【埋下伏笔】 二、RabbitMQ为何要有虚拟机1.从业务角度来讲2.步步探索1.优点2.结合业务适用场景和需求3.发掘真正的原因4…

NoSql数据库Redis知识点

数据库的分类 关系型数据库 &#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQL 数据库 &#xff0c;全称为 Not Only SQL &a…

Python学习——【4.1】数据容器:list列表

文章目录 【4.1】数据容器&#xff1a;list列表一、数据容器入门二、数据容器&#xff1a;list 列表&#xff08;一&#xff09;列表的定义&#xff08;二&#xff09;列表的下标索引&#xff08;三&#xff09;列表的常用操作&#xff08;1&#xff09;列表的查询功能&#xf…

RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。大语言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API&#xff0c;可以轻松集成到各类企业系统。支持丰富的文件类型&#xff0c;包括 Word 文档、PPT、exc…

Vue3入门 - ElementPlus中左侧菜单和Tabs菜单组合联动效果

在Vue3中&#xff0c;ElementPlus是使用比较广泛的UI组件库&#xff0c;提供了丰富的界面元素支持项目开发需求。在后台管理系统中&#xff0c;左侧或顶部的菜单栏通常包含多个子菜单项&#xff0c;通过菜单的展开和收缩功能&#xff0c;用户可以方便地查看或隐藏不需要的菜单项…

数字世界中的浪漫:揭秘会跳动的爱心

在编程的世界里&#xff0c;复杂的技术可以与艺术产生美妙的碰撞。无论是通过代码实现动态效果&#xff0c;还是用算法绘制图案&#xff0c;程序员都可以成为数字艺术的创作者。而今天&#xff0c;我们将通过 Python 的强大 GUI 工具库 Tkinter&#xff0c;用简单的代码生成一颗…

U-Boot顶层Makefile详解

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用&#xff0c;方便进一步记录自己的实践总结。 上一章我们详细的讲解了 uboot 的使用方法&#xff0c;其实就是各种命令的使用&#xff0c;学会 uboot 使用以后就可以尝试移植 uboot 到自己的开发…

linux操作系统的基本命令

1.linux下的文件系统 在linux操作目录下没有像window操作系统下盘符的概念,只有一个根目录/,所有文件目录都在它的下面 linux的目录结构: 在Linux系统中: 文件都从跟目录开始的,用/表示文件名称区分大小写路径都是以/俩进行分隔(windown用\分隔)以.开头的文件为隐藏文件 Li…

鸿蒙开发之ArkUI 界面篇 十七 购物综合案例

layoutWeight:子元素与兄弟元素主轴方向按照权重进行分配,参数是联合类型&#xff0c;数字或者是字符串&#xff0c;在指定的空间占多少份额&#xff0c;数字越大&#xff0c;表示在空间中占用的份额越多&#xff0c;如果父容器的子组件没有别的指定&#xff0c;剩下的空间全部…

10分钟一条童装走秀爆款Ai视频,小白轻松上手,新蓝海赛道,竞争小机会多!

今天我要给大家带来一个超级有趣的项目——童装走秀AI视频制作。 这不仅是一个充满创意的项目&#xff0c;而且操作简单&#xff0c;即使是视频制作的新手也能轻松上手。 更重要的是&#xff0c;这个项目竞争小&#xff0c;变现机会多&#xff0c;是进入新蓝海赛道的绝佳机会…

C++类之set与get理解

在类中&#xff0c;我们尝尝将一些变量设置为private或者protect里面&#xff0c;而我们经常会遇到在主函数&#xff08;main.cpp&#xff09;使用到这些private变量&#xff0c;而往往我们会下意识地在主函数直接调用在private里面的变量&#xff0c;但现实比较残酷&#xff0…