F. Selling a Menagerie Codeforces Round 895 (Div. 3)

news2024/9/20 16:59:47

Problem - F - Codeforces

题目大意:有n个动物,每个动物i有一个害怕的动物a[i],现要卖掉所有动物,每个动物都有价值c[i],如果i在a[i]之前卖掉,就会获得2*c[i]的价值,如果在a[i]之后被卖掉就会获得c[i]的价值,问以什么顺序卖掉所有动物能使获得的总价值最高

2<=n<=1e5;1<=ci<=1e9

思路:对于这种约束问题,首先直接从i向a[i]建单向边,初始状态下,所有没有入边的点卖掉都能获得2*c[i]的价值,同时因为该点被删除,所以他们指向的点入度-1,接着卖掉入度为0的点,依次循环,最后一定会出现剩下的点都成环的情况。

对于某一个环,我们最优的方案就是选择一个点留着最后卖,其余的点按照环的方向依次卖,例如题目中的样例5,画出的涂如下,卖的顺序就是1,5,7,3,2,6,4

也就是我们dfs遍历每个环,在环中找出价值最小的那个点,把它放在最后,其余点按环的顺序即可

//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
int n;
pair<ll, ll>a[N];
int to[N];
int d[N];
bool vis[N];
ll c[N];
void init()
{
	for (int i = 1; i <= n; i++)
	{
		d[i] = 0;
		vis[i] = 0;
	}
}
ll mi, mii;
void dfs(int u)
{//遍历环
	int v = to[u];
	if (c[u] < mi)
	{
		mi = c[u];
		mii = u;
	}//找到环中价值最小的点
	vis[u] = 1;
	if (!vis[v])
	{
		dfs(v);
	}
}
void solve()
{
	cin >> n;
	init();
	for (int i = 1; i <= n; i++)
	{
		int v;
		cin >> v;
		to[i] = v;//建有向边
		d[v]++;//记录入度
	}
	for (int i = 1; i <= n; i++)
	{
		cin >> c[i];
	}
	queue<int>q;
	vector<int>ans;
	for (int i = 1; i <= n; i++)
	{
		if (d[i] == 0)
		{//将初始入度为0的先卖掉
			q.push(i);
			vis[i] = 1;
		}
	}
	while (!q.empty())
	{//先处理环外的点
		int u = q.front();
		q.pop();
		ans.push_back(u);
		int v = to[u];
		d[v]--;//类似于拓扑排序的操作
		if (!d[v])
		{
			vis[v] = 1;
			q.push(v);
		}
	}
	for (int i = 1; i <= n; i++)
	{
		if (!vis[i])
		{
			mi = 1e9 + 1;
			dfs(i);
			int now = to[mii];//从价值最小的点的下一个点开始沿着环卖
			while (now != mii)
			{
				ans.push_back(now);
				now = to[now];
			}
			ans.push_back(mii);
		}
	}
	for (int i = 0; i < ans.size(); i++)
	{
		cout << ans[i] << " ";
	}
	cout << endl;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int t;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

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

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

相关文章

垃圾回收 - 分代垃圾回收

分代垃圾回收在对象中导入了“年龄”的概念&#xff0c;通过优先回收容易成为垃圾的对象&#xff0c;提高垃圾回收的效率。 1、新生代对象和老年代对象 分代垃圾回收中把对象分类成几代&#xff0c;针对不同的代使用不同的 GC 算法&#xff0c;我们把刚生成的对象称为新生代对…

UI自动化测试详解

前言 随着智能化信息基础设施的推进&#xff0c;软件开发的进程也不断加快。软件测试工作也逐渐由传统的手工测试向软件自动化测试跨越。 对于很多企业来说&#xff0c;做好软件自动化测试工作已经不仅仅是通过测试工具进行“点点点”&#xff0c;要想找出软件测试过程中的缺…

python 小案例72

import requestsdef fetch_data_from_api(url):response requests.get(url)if response.status_code 200:data response.json()return dataelse:print("Failed to fetch data from API")return None# 使用NASA的API获取每日天文图片 url "https://api.nasa.…

【Springcloud】Actuator服务监控

【Springcloud】Actuator服务监控 【一】基本介绍【二】如何使用【三】端点分类【四】整合Admin-Ui【五】客户端配置【六】集成Nacos【七】登录认证【八】实时日志【九】动态日志【十】自定义通知 【一】基本介绍 &#xff08;1&#xff09;什么是服务监控 监视当前系统应用状…

情侣头像微信小程序源码 朋友圈背景小程序源码 动态壁纸微信小程序源码

壁纸和情侣头像&#xff0c;朋友圈素材都可以做&#xff0c;带视频教程。 搭建也不难&#xff0c;纯前端无后台。直接开发者工具调试前端&#xff0c;绑定合法域名&#xff0c;流量主功能也是在前端替换。 无需服务器域名直接上手&#xff01;&#xff01;&#xff01;

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要

飞行动力学 - 第17节-part3-垂尾和推进系统对航向的影响 之 基础点摘要 1. 尾翼的贡献2. 垂尾是航向静稳定性的最大来源3. 推进系统对航向的贡献3.1 螺旋桨3.2 喷气式 4. 参考资料 1. 尾翼的贡献 平尾对航向静稳定性的影响机理与机翼相同&#xff0c;由于尺寸小&#xff0c;通…

AI教程 | 用Midjourney制作AI模特和换装的保姆级教程

Hi! 大家好&#xff0c;我是专注于AI项目实战的赤辰。 昨天电商朋友过来交流&#xff0c;聊到他最近新开了一家淘宝店&#xff0c;在没有请任何员工的情况下&#xff0c;他一个人用AI工具完成了店铺取名&#xff0c;商品文案&#xff0c;店铺logo&#xff0c;主图设计&#xf…

ASO优化之阅读并回复应用的评论

回复评论对于与用户保持牢固的关系非常重要。如果时间有限&#xff0c;优先回复负面评论&#xff0c;可以向其他用户保证&#xff0c;我们正在积极解决应用的问题&#xff0c;从而提高转化率。 1、逻辑与沟通要清晰。 首先&#xff0c;无论他们的反馈是正面还是负面&#xff0…

【c++】如何有效地利用命名空间?

​ &#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言什么是命名空间&#xff1f;命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

51单片机-直流电机学习

简介 51单片机采用的是5V的直流电机 轴长&#xff1a;8mm 轴径&#xff1a;2mm 电压&#xff1a;1-6V 参考电流&#xff1a;0.35-0.4A 3V 转速&#xff1a;17000-18000 转每分钟 他的组成&#xff1a; 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止…

【Spring】aop的底层原理

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理 Spring 中的切面编程aop的底层原理和重点注意的地方 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以…

工作和生活中,如何用项目管理思维解决复杂的事情?

在工作和生活中&#xff0c;许多事情都可以采用项目思维方式来解决。当我们逐渐将工作和生活中的各种事务以项目的方式来处理和推进时&#xff0c;我们可能并没有意识到&#xff0c;实际上我们正在运用项目管理思维。 项目管理思维能帮助我们在面对繁杂事务时&#xff0c;理清…

DevOps到底是什么意思?

前言: 当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念。那么,到底什么是"DevOps"呢? 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具,还有人说它是一种思想。更有甚者,说它是一种哲学…

【echarts】如何修改折线图X轴每个刻度的间隔宽度,让拥挤的空间变大,所有坐标点的文案可以显示得下,Echarts x轴文本内容太长的几种解决方案

Echarts 如何修改折线图X轴每个刻度的间隔宽度&#xff0c;让拥挤的空间变大&#xff0c;所有坐标点的文案可以显示得下&#xff0c;Echarts x轴文本内容太长的几种解决方案 有以下几种方案&#xff0c;堪称最全方案&#xff1a; 1、dataZoom进行坐标的比例缩放 通过调整dataZ…

生态第五篇-调度的多维空间技术

生态第五篇-调度的多维空间技术 文章目录 生态第五篇-调度的多维空间技术前言一、什么是多维空间&#xff1f;二、实现原理1.先看效果2.如何实现 预告 前言 调度已经结束更新了本不想再更新调度技术&#xff0c;因为生态的更新计划里面有这一条所以就写一篇把 一、什么是多维…

Java“牵手”ebay商品详情数据,ebay商品详情API接口,ebayAPI接口申请指南

天猫平台商品详情接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口&#xff0c;通过…

了解Armv8.x和Armv9.x扩展

概述 Arm架构新增的功能以扩展的形式提供&#xff0c;这样Arm能够定期发布新功能&#xff0c;以响应合作伙伴的需求&#xff0c;而无需对主架构进行重大更改。 Arm 每年都会发布新的扩展。Cortex CPU 是该架构的 Arm 实现&#xff0c;其会根据发布时间使用相应的扩展。 本指…

扫描mapper包

文章目录 第一种-配置在resource目录下第二种- 直接配置java代码目录&#xff0c;在Maven中配置相关路径 第一种-配置在resource目录下 第二种- 直接配置java代码目录&#xff0c;在Maven中配置相关路径 不配置不会把mapper的xml文件编译到target文件中 <build><res…

vs2022不能加载winform界面

今天遇到vs2022加载winform界面错误&#xff0c; The service ‘Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService’ must be installed for this feature to work。 当前vs版本&#xff1a; Microsoft Visual Studio Enterprise 2022 (64 位) - Cur…

虚拟化和容器

文章目录 1 介绍1.1 简介1.2 虚拟化工作原理1.3 两大核心组件&#xff1a;QEMU、KVMQEMUKVM 1.4 发展历史1.5 虚拟化类型1.6 云计算与虚拟化1.7 HypervisorHypervisor分为两大类 1.8 虚拟化 VS 容器 2 虚拟化应用dockerdocker 与虚拟机的区别 K8Swine 参考 1 介绍 1.1 简介 虚…