当前位置: 首页 > news >正文

Selling a Menagerie(cf)

该题考察了拓扑排序+dfs

题意:你是一个动物园的主人,该动物园由编号从1到n的n只动物组成。然而,维护动物园是相当昂贵的,所以你决定卖掉它!众所周知,每种动物都害怕另一种动物。更确切地说,动物ii害怕动物ai(ai≠i)。此外,每只动物的成本是已知的,对于动物ii,它等于ci。你会按照固定的顺序卖掉你所有的动物。形式上,您需要选择一些排列†p1,p2,…,pn,然后先出售动物p1,然后出售动物p2,依此类推,最后出售动物pn。当你出售动物ii时

有两种可能的结果:如果动物ai在动物ii之前出售,你将因出售动物ii而获得cici资金。如果动物ai在动物i之前没有被出售,您出售动物i将获得2∙ci的金钱。(令人惊讶的是,目前害怕的动物更有价值)。你的任务是选择出售动物的顺序,以最大限度地提高总利润。多组输入

输入样例

8

3

2 3 2

6 6 1

8

2 1 4 3 6 5 8 7

1 2 1 2 2 1 2 1

5

2 1 1 1 1

9 8 1 1 1

2

2 1

1000000000 999999999

7

2 3 2 6 4 4 3

1 2 3 4 5 6 7

5

3 4 4 1 3

3 4 5 6 7

3

2 1 1

1 2 2

4

2 1 4 1

1 1 1 1

输出样例 

1 2 3
2 4 5 1 6 3 7 8
3 4 5 1 2
1 2
7 5 1 3 2 6 4
5 3 2 4 1
3 2 1
3 4 1 2

思路: 如果该动物害怕的动物已经卖出了 则该动物能获得利润ci 若没有卖出则ci

所以应该尽量让每个动物在它害怕的动物卖出前卖出 即 i在a[i]之前卖出(害怕的动物先卖出)

若该动物没有被任何动物害怕 可以让它们先卖出

同时将这些动物卖出之后,可能又会使得一些动物不被任何动物害怕(可以想象到用拓扑排序)

 比如 a :2 3 4 5 3,那么动物 1 就没有被任何动物害怕,我们先将它卖出,卖出之后又会使得动物 2 不被任何动物害怕。这个过程可以用拓扑排序实现,相当于连一条 i 到 a[i] 的边,同时记录每个点的入度,入度为 0 时入队即可。

但这个拓扑过程可能并不会包含所有的点,因为有些点之间可能是一个环的关系,就是一个怕一个,形成了个闭环,比如上述例子中的动物 ,,3,4,5 。对于这种环我们拓扑肯定是处理不了的。我们需要考虑打破这个环,使其成为一个有顺序的链,那么很明显我们可以使价格最便宜的动物作为链的末尾,因此我们可以先用一个 dfs 找到这个环中价格最小的动物,然后让它所害怕的动物作为链的起始即可。

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int N=5e5+10;
int a[N],c[N],d[N],id=-1,mins=0;
bool st[N];
void dfs(int u)
{if(st[u]) return ;st[u]=true;int x=a[u];if(c[x]<mins) mins=c[x],id=x;dfs(x);
}
int main()
{int t;cin>>t;while(t--){memset(st,0,sizeof st);memset(d,0,sizeof d);int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i],d[a[i]]++;for(int i=1;i<=n;i++) cin>>c[i];queue<int>q;vector<int>v;//拓扑排序for(int i=1;i<=n;i++)if(!d[i]) q.push(i);while(q.size()){int t=q.front();q.pop();st[t]=true;v.push_back(t);int x=a[t];d[x]--;if(!d[x]) q.push(x);}for(int i=1;i<=n;i++){//寻找是否有环if(!st[i]){mins=c[i];id=i;dfs(i);int x=a[id];、//用do  while 先运行一次 否则用while根本就不会进去do{v.push_back(x);x=a[x];}while(x!=a[id]);}}for(int i=0;i<v.size();i++) cout<<v[i]<<" ";cout<<endl;}return 0;
}

相关文章:

Selling a Menagerie(cf)

该题考察了拓扑排序dfs 题意&#xff1a;你是一个动物园的主人&#xff0c;该动物园由编号从1到n的n只动物组成。然而&#xff0c;维护动物园是相当昂贵的&#xff0c;所以你决定卖掉它&#xff01;众所周知&#xff0c;每种动物都害怕另一种动物。更确切地说&#xff0c;动物…...

python-55-打包exe执行

目录 前言一、pyinstaller二、实践打包exe1、遇坑1&#xff1a;Plugin already registered2、遇坑2&#xff1a;OSError 句柄无效 三、总结 前言 你是否有这种烦恼&#xff1f; 别人在使用你的项目时可能还需要安装各种依赖包&#xff1f;别人在使用你的项目&#xff0c;可能…...

linux并发服务器 —— IO多路复用(八)

半关闭、端口复用 半关闭只能实现数据单方向的传输&#xff1b;当TCP 接中A向 B 发送 FIN 请求关闭&#xff0c;另一端 B 回应ACK 之后 (A 端进入 FIN_WAIT_2 状态)&#xff0c;并没有立即发送 FIN 给 A&#xff0c;A 方处于半连接状态 (半开关)&#xff0c;此时 A 可以接收 B…...

企微SCRM营销平台MarketGo-ChatGPT助力私域运营

一、前言 ChatGPT是由OpenAI&#xff08;开放人工智能&#xff09;研发的自然语言处理模型&#xff0c;其全称为"Conversational Generative Pre-trained Transformer"&#xff0c;即对话式预训练转换器。它是GPT系列模型的最新版本&#xff0c;GPT全称为"Gene…...

linux C++ 海康截图Demo

项目结构 CMakeLists.txt cmake_minimum_required(VERSION 3.7)project(CapPictureTest)include_directories(include)link_directories(${CMAKE_SOURCE_DIR}/lib ${CMAKE_SOURCE_DIR}/lib/HCNetSDKCom) add_executable(CapPictureTest ${CMAKE_SOURCE_DIR}/src/CapPictureTes…...

MySQL的事务隔离级别

目录 事务隔离级别的概念 脏读&#xff08;Dirty Read&#xff09;&#xff1a; 不可重复读&#xff08;Non-Repeatable Read&#xff09;&#xff1a; 幻读&#xff08;Phantom Read&#xff09;&#xff1a; 读未提交&#xff08;Read Uncommitted&#xff09; 读未提交…...

企业大语言模型智能问答的底层基础数据知识库如何搭建?

企业大语言模型智能问答的底层基础数据知识库搭建是一个复杂而关键的过程。下面将详细介绍如何搭建这样一个知识库。 确定知识库的范围和目标&#xff1a; 首先&#xff0c;需要明确知识库的范围&#xff0c;确定所涵盖的领域和主题。这可以根据企业的业务领域和用户需求来确…...

【腾讯云 Cloud Studio 实战训练营】使用python爬虫和数据可视化对比“泸州老窖和五粮液4年内股票变化”

Cloud Studio 简介 Cloud Studio是腾讯云发布的云端开发者工具&#xff0c;支持开发者利用Web IDE&#xff08;集成开发环境&#xff09;&#xff0c;实现远程协作开发和应用部署。 现在的Cloud Studio已经全面支持Java Spring Boot、Python、Node.js等多种开发模板示例库&am…...

Linux之Shell概述

目录 Linux之Shell概述 学习shell的原因 shell是什么 shell起源 查看当前系统支持的shell 查看当前系统默认shell Shell 概念 Shell 程序设计语言 Shell 也是一种脚本语言 用途 Shell脚本的基本元素 基本元素构成&#xff1a; Shell脚本中的注释和风格 Shell脚本编…...

手写Spring:第2章-创建简单的Bean容器

文章目录 一、目标&#xff1a;创建简单的Bean容器二、设计&#xff1a;创建简单的Bean容器三、实现&#xff1a;创建简单的Bean容器3.0 引入依赖3.1 工程结构3.2 创建简单Bean容器类图3.3 Bean定义3.4 Bean工厂 四、测试&#xff1a;创建简单的Bean容器4.1 用户Bean对象4.2 单…...

在Windows上通过SSH公私钥实现无密码登录Linux

在Windows上通过SSH公私钥实现无密码登录Linux 在Windows上生成SSH密钥对&#xff1a; 打开命令提示符或PowerShell窗口。 输入以下命令生成SSH密钥对&#xff1a; ssh-keygen -t rsa -b 4096按照提示输入密钥的保存路径和密码&#xff08;可选&#xff09;。 在指定的路径下…...

使用ppt和texlive生成eps图片(高清、可插入latex论文)

一、说明 写论文经常需要生成高清的图片插入到论文中&#xff0c;本文以ppt画图生成高质量的eps图片的实现来介绍具体操作方法。关于为什么要生成eps图片&#xff0c;一个是期刊要求&#xff08;也有不要求的&#xff09;&#xff0c;另一个是显示图像的质量高。 转化获得eps…...

html5学习笔记19-SSE服务器发送事件(Server-Sent Events)

https://www.runoob.com/html/html5-serversentevents.html 允许网页获得来自服务器的更新。类似设置回调函数。 if(typeof(EventSource)!"undefined"){var sourcenew EventSource("demo_sse.php");source.onmessagefunction(event){document.getElement…...

高效数据湖构建与数据仓库融合:大规模数据架构最佳实践

文章目录 数据湖和数据仓库&#xff1a;两大不同理念数据湖数据仓库 数据湖与数据仓库的融合统一数据目录数据清洗和转换数据安全和权限控制数据分析和可视化 数据湖与数据仓库融合的优势未来趋势云原生数据湖自动化数据处理边缘计算与数据湖融合 结论 &#x1f389;欢迎来到云…...

Java学习笔记——35多线程02

线程同步 线程同步卖票案例同步代码块同步方法块 线程安全的类StringBufferVectorHashtable Lock锁 线程同步 卖票案例 public class SellTicket implements Runnable{private int tickets10;Overridepublic void run(){while (true){if(tickets>0){System.out.println(Th…...

每日刷题-3

目录 一、选择题 二、编程题 1、计算糖果 2、进制转换 一、选择题 1、 解析&#xff1a;在C语言中&#xff0c;以0开头的整数常量是八进制的&#xff0c;而不是十进制的。所以&#xff0c;0123的八进制表示相当于83的十进制表示&#xff0c;而123的十进制表示不变。printf函数…...

储能直流侧计量表DJSF1352

安科瑞 华楠 具有CE/UL/CPA/TUV认证 DJSF1352-RN导轨式直流电能表带有双路直流输入&#xff0c;主要针对电信基站、直流充电桩、太阳能光伏等应用场合而设计&#xff0c;该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。在实际使用现场&#xff0c;即可计量总…...

机器学习报错合集(持续更新)

文章目录 1 列表转numpy&#xff0c;尺寸不均匀问题 1 列表转numpy&#xff0c;尺寸不均匀问题 ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (4,) inhomogeneous pa…...

【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】驱动移植

一、环境介绍 RK3588主板搭载Android12操作系统,内核是Linux5.10,使用ST的六轴传感器LSM6DSR芯片。 二、芯片介绍 LSM6DSR是一款加速度和角速度(陀螺仪)六轴传感器,还内置了一个温度传感器。该芯片可以选择I2C,SPI通讯,还有可编程终端,可以后置摄像头等设备,功能是很…...

day-41 代码随想录算法训练营(19)动态规划 part 03

343.整数拆分 思路&#xff1a; 1.dp存储的是第i个数&#xff0c;拆分之后最大乘积2.dp[i]max(dp[i],max(j*(i-j),j*dp[i-j]));3.初始化&#xff1a;dp[0]dp[1]0,dp[2]1;4.遍历顺序&#xff1a;外层循环 3-n&#xff0c;内层循环 1-i 2.涉及两次取max&#xff1a; dp[i] 表…...

强化学习优化文本生成:从原理到实战,打造可控AI创作工具

1. 项目概述&#xff1a;当强化学习遇上文本生成如果你玩过AI绘画&#xff0c;一定对“提示词工程”不陌生——通过精心设计的文字描述&#xff0c;让模型画出你想要的画面。但你是否想过&#xff0c;这个过程本身也可以被“优化”&#xff1f;比如&#xff0c;你希望模型生成一…...

基于BLE与伺服电机的非侵入式墙壁开关遥控改造方案

1. 项目概述想给家里的老式墙壁灯开关加个遥控功能&#xff0c;但又不想碰那危险的220V强电线路&#xff1f;这个项目或许能给你一个既安全又有趣的解决方案。我最近用Adafruit的几块开发板&#xff0c;配合一个微型伺服电机和3D打印的支架&#xff0c;做了一个蓝牙遥控的机械式…...

大模型KV缓存量化技术:原理、优化与实践

1. KV缓存量化技术背景解析在Transformer架构的大语言模型(LLM)推理过程中&#xff0c;注意力机制的计算复杂度与序列长度呈平方关系增长。为优化这一过程&#xff0c;现代LLM服务系统普遍采用KV缓存(Key-Value Cache)技术&#xff0c;将注意力层计算过的键值对存储在内存中供后…...

嵌入式飞行控制实战:从传感器融合到PID调参的无人机飞控开发指南

1. 项目概述与核心价值最近在嵌入式开发圈子里&#xff0c;一个名为trsdn/nanopielot的项目引起了我的注意。乍一看这个名字&#xff0c;它像是一个针对特定硬件平台&#xff08;比如树莓派 Pico 或类似的 RP2040 微控制器&#xff09;的飞行控制项目。nanopi可能指代 NanoPi 系…...

告别GBIF官网卡顿!用R语言raster/dismo包5分钟搞定物种分布数据下载与清洗

告别GBIF官网卡顿&#xff01;用R语言raster/dismo包5分钟搞定物种分布数据下载与清洗 当你在深夜赶论文&#xff0c;急需下载某个物种的全球分布数据时&#xff0c;GBIF官网却不断弹出"503 Service Unavailable"&#xff1b;当你终于打开页面&#xff0c;却发现每页…...

从白噪声到ARMA谱:平稳随机信号功率谱的实战解析

1. 平稳随机信号功率谱密度的工程意义 第一次接触功率谱密度这个概念时&#xff0c;我也被那一堆数学公式搞得头晕。直到有次在调试通信设备时&#xff0c;发现接收端总是有奇怪的干扰&#xff0c;导师让我做个频谱分析&#xff0c;这才真正明白功率谱密度到底有什么用。简单来…...

Java程序员什么时候要深入学习JVM底层原理?

当你工作多年之后&#xff0c;你遇到的项目会越来越复杂&#xff0c;遇到的问题也会越来越复杂&#xff1a;各种古怪的内存溢出&#xff0c;死锁&#xff0c;应用崩溃……这些都会迫使你不得不去深入学习JVM底层原理那么应该如何学JVM只靠周大神的JVM圣经吗&#xff1f;当然不够…...

基于Circuit Playground与柔性3D打印的可穿戴设备制作全攻略

1. 项目概述&#xff1a;当创客遇上柔性穿戴如果你玩过Arduino&#xff0c;或者对智能硬件有点兴趣&#xff0c;那你大概率听说过Adafruit的Circuit Playground。这块板子挺有意思&#xff0c;它把一堆传感器、LED灯、小喇叭和按钮都塞进了一个硬币大小的板子上&#xff0c;号称…...

2026年南京本地实测整理,值得入手的高性价比全屋定制品牌推荐

讲真&#xff0c;南京准备装房子、换柜子的姊妹们、老少爷们&#xff0c;谁没为全屋定制头大过&#xff1f;刚收了江北核心区的新房&#xff0c;还是鼓楼老破小准备翻新&#xff0c;跑了三五家门店就会发现&#xff1a;水太深了&#xff01;低价套餐勾你进去&#xff0c;签约后…...

开源灵巧手OpenClaw:从机械设计到AI抓取的完整实现指南

1. 项目概述&#xff1a;当开源机械爪遇上AI大脑 最近在机器人开源社区里&#xff0c;一个名为“OpenClaw”的项目引起了我的注意。这个由Turbo Labs团队发布的项目&#xff0c;其核心目标非常明确&#xff1a;打造一个低成本、高性能、且完全开源的机器人灵巧手&#xff08;或…...