PTA L2-038 病毒溯源

V.JPG

病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。

现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。

在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异问题 —— 即每一种病毒都是由唯一的一种病毒突变而来,并且不存在循环变异的情况。

输入格式:

输入在第一行中给出一个正整数 N(≤104),即病毒种类的总数。于是我们将所有病毒从 0 到 N−1 进行编号。

随后 N 行,每行按以下格式描述一种病毒的变异情况:

k 变异株1 …… 变异株k

其中 k 是该病毒产生的变异毒株的种类数,后面跟着每种变异株的编号。第 i 行对应编号为 i 的病毒(0≤i<N)。题目保证病毒源头有且仅有一个。

输出格式:

首先输出从源头开始最长变异链的长度。

在第二行中输出从源头开始最长的一条变异链,编号间以 1 个空格分隔,行首尾不得有多余空格。如果最长链不唯一,则输出最小序列。

注:我们称序列 { a1​,⋯,an​ } 比序列 { b1​,⋯,bn​ } “小”,如果存在 1≤k≤n 满足 ai​=bi​ 对所有 i<k 成立,且 ak​<bk​。

输入样例:

10
3 6 4 8
0
0
0
2 5 9
0
1 7
1 2
0
2 3 1

输出样例:

4
0 4 9 1

测试点解析

注意:病毒源头不一定是零

测试点1和6:路径的选择,要是最小序列,而且从源头开始比较。

以下测试点来自下面这篇博客

测试点1346:病原体不一定是0,若默认是0只能通过测试点025

测试点0:样例,注意序列长度相同的序列比较

测试点2:只有一株病毒,即病原体

测试点5:最大数据10000

天梯赛练习集 L2-038 病毒溯源(25分)dfs算法4 含测试点解析-CSDN博客

做法:

1.记录每种病毒是由谁变异过来的

2.从每一个病毒向源头遍历

3.找出最长链的最小序列

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 10010;int of[N];int ans[N], tmp[N], ida, idt;
void find(int x)
{tmp[idt++] = x;if (x != of[x]) find(of[x]);
}
bool check()//测试点1和测试点6
{if (idt > ida) return true;else if (idt < ida) return false;for (int i = ida - 1;i >= 0; i--)//从开头到结尾比较{if (tmp[i] < ans[i]) return true;else if (tmp[i] > ans[i]) return false;}return false;
}
int main()
{int n = 0;scanf("%d", &n);for (int i = 0; i < n; i++) of[i] = i;for (int i = 0; i < n; i++){int m = 0;scanf("%d", &m);for (int j = 0; j < m; j++)//记录每个的前驱{int t = 0;scanf("%d", &t);of[t] = i;}}for (int i = 0; i < n; i++)//遍历每一个点{idt = 0;find(i);//寻找从径(注意路径是反过来存储的)if (check())//比较路径{ida = idt;for (int i = 0; i < idt; i++) ans[i] = tmp[i];}}printf("%d\n", ida);for (int i = ida - 1; i >= 0; i--)printf("%d%s", ans[i], (i == 0 ? "" : " "));return 0;
}

改进一下(变快了):

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 10010;int of[N],gen[N];
bool st[N];int ans[N], tmp[N], ida, idt;
int find(int x)
{if(!gen[x]) gen[x] = find(of[x]) + 1;return gen[x];
}
void record(int u)//记录
{if(u != of[u]) record(of[u]);tmp[idt++] = u;
}int main()
{int n = 0;scanf("%d", &n);for (int i = 0; i < n; i++) of[i] = i;for (int i = 0; i < n; i++){int m = 0;scanf("%d", &m);for (int j = 0; j < m; j++)//记录每个的前驱{int t = 0;scanf("%d", &t);st[t] = true;//有前驱,不可能是源头of[t] = i;}}int source = 0;while(st[source]) source++;gen[source] = 1;int len = 0;for (int i = 0; i < n; i++)//遍历每一个点{gen[i] = find(i);if(gen[i] > len) len = gen[i];//找到最长路径}for(int i = 0;i < n;i++)if(gen[i] == len){idt = 0;record(i);//记录路径int flag = 1;for(int i = 0;i < idt;i++)//挑选最小序列if(ans[i] < tmp[i]){flag = 0;break;}else if(ans[i] > tmp[i]) break;if(!ida || flag) memcpy(ans,tmp,sizeof ans);ida = idt;}printf("%d\n", ida);for (int i = 0; i < ida; i++)printf("%d%s", ans[i], (i == ida - 1 ? "" : " "));return 0;
}

结果: 

第一份代码:

第二份代码:

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

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

相关文章

用 AI 编程-释放ChatGPT的力量

最近读了本书&#xff0c;是 Sean A Williams 写的&#xff0c;感觉上还是相当不错的。一本薄薄的英文书&#xff0c;还真是写的相当好。如果你想看&#xff0c;还找不到&#xff0c;可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…

Vue2版本封装公共echarts的监听方法

#注意 &#xff1a; 因为一个页面有多个图表&#xff0c;所以封装一个公共的js文件&#xff0c;方便后续使用。 适用于Vue2版本&#xff0c;粘贴即用即可。 1、echartsMixin.js文件如下 // echartsMixin.js import echarts from echartsexport default {data() {return {myC…

标题:基于uQRCode的Vue前端二维码生成组件技术探究

摘要&#xff1a;随着移动互联网的普及&#xff0c;二维码作为信息传递的媒介在各类应用中得到了广泛使用。前端开发中&#xff0c;二维码生成功能已成为一个常见的需求。本文将深入探讨如何使用uQRCode库在Vue前端框架中封装一个二维码生成组件&#xff0c;该组件可适用于所有…

小迪学习笔记(内网安全)(常见概念和信息收集)

小迪学习笔记&#xff08;内网安全&#xff09;&#xff08;一&#xff09; 内网分布图内网基本概念工作组和域环境的优缺点内网常用命令域的分类单域父域和子域域数和域森林 Linux域渗透问题内网安全流程小迪演示环境信息收集mimikatzLazagne(all)凭据信息政集操作演示探针主机…

夏季水域安全管理,AI智能识别算法防溺水视频监控方案

随着夏季的到来&#xff0c;不少人为了一时的痛快凉爽就私自下水游泳&#xff0c;特别是在野外池塘&#xff0c;由于长期无人监管&#xff0c;极易发生人员溺亡事件&#xff0c;如何对池塘水域进行全天候无人值守智能监管&#xff0c;并实现发生人员闯入就立即告警&#xff1f;…

C# 学习第五弹——语句

一、if语句 —简单if语句 —if else 语句 —if else if else 语句 1、简单if语句 if&#xff08;表达式&#xff09;{语句} &#xff08;1&#xff09;表达式必须使用圆括号括起来&#xff1b; &#xff08;2&#xff09;表达式&#xff1a;关系表达式或逻辑表达…

数据结构:单调栈和单调队列

文章目录 一、单调栈1.1、栈的思想1.2、单调栈1.2.1、单调栈的基本应用&#xff1a;找出数组中每个元素右侧第一个更大的元素1.2.2、单调栈的基本应用&#xff1a;找出数组中每个元素左侧第一个更大的元素1.2.3、单调栈拓展1.2.4、单调栈LeetCode题单 二、单调队列2.1、队列的思…

java数据结构与算法刷题-----LeetCode34. 在排序数组中查找元素的第一个和最后一个位置

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 二分查找 二分查找 解题思路&#xff1a;时间复杂度O( l o g 2 …

算法沉淀——拓扑排序

前言&#xff1a; 首先我们需要知道什么是拓扑排序&#xff1f; 在正式讲解拓扑排序这个算法之前&#xff0c;我们需要了解一些前置知识&#xff08;和离散数学相关&#xff09; 1、有向无环图&#xff1a; 指的是一个无回路的有向图。 入度&#xff1a;有向图中某点作为图…

HarmonyOS 应用开发之启动/停止本地PageAbility

启动本地PageAbility PageAbility相关的能力通过featureAbility提供&#xff0c;启动本地Ability通过featureAbility中的startAbility接口实现。 表1 featureAbility接口说明 接口名接口描述startAbility(parameter: StartAbilityParameter)启动Ability。startAbilityForRes…

人工智能|推荐系统——搜索引擎广告

原文题目 Dark sides of artificial intelligence: The dangers of automated decision-making in search engine advertising(JASIST,2023) 人工智能的阴暗面:搜索引擎广告自动决策的危险 摘要 随着人工智能应用的日益广泛,搜索引擎供应商越来越多地要求广告商使用基于机…

k8s局域网通过operator部署rabbitmq

参考&#xff1a;Installing RabbitMQ Cluster Operator in a Kubernetes Cluster | RabbitMQ 1、下载cluster-operator.yml wget https://github.com/rabbitmq/cluster-operator/releases/download/v2.7.0/cluster-operator.yml 2、拉取对应的镜像&#xff0c;这里的版本是根…

什么是搜索引擎(SEO)爬虫它们是如何工作的?

什么是搜索引擎&#xff08;SEO&#xff09;爬虫&它们是如何工作的&#xff1f; 你的网站上有蜘蛛&#x1f577;️。别抓狂&#xff01;我说的不是真正的八条腿的蜘蛛&#x1f577;️。 我指的是搜索引擎优化爬虫。他们是实现SEO的机器人。每个主要的搜索引擎都使用爬虫来…

linux centos7.9 weblogic14c java1.8.401 安装部署流程

一、获取安装包&#xff1a; Java1.8.401&#xff1a;Java Downloads | Oracle weblogic 14c&#xff1a;https://download.oracle.com/otn/nt/middleware/14c/14110/fmw_14.1.1.0.0_wls_lite_Disk1_1of1.zip 选generic版本 二、将安装包传到Linux服务器上 方法不限&#xf…

物理寻址和功能寻址,服务器不同的应答策略和NRC回复策略

1&#xff1a;功能寻址&#xff0c;服务器应答与NRC回复策略 详细策略上&#xff0c;又分为服务有子功能&#xff0c;和不存在子功能。 1.1功能寻址&#xff0c;存在子功能 存在子功能的情况下&#xff0c;又分为supress postive response &#xff08;即子功能字节的bit7&a…

Servlet基础 管理员注册页面

管理员注册页面 index.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":&quo…

搜索与图论——bellman—ford算法、spfa算法求最短路

bellman-ford算法 时间复杂度O(nm) 在一般情况下&#xff0c;spfa算法都优于bf算法&#xff0c;但遇到最短路的边数有限制的题时&#xff0c;只能用bf算法 bf算法和dijkstra很像 #include<iostream> #include<queue> #include<cstring> #include<algori…

新数字时代的启示:揭开Web3的秘密之路

在当今数字时代&#xff0c;随着区块链技术的不断发展&#xff0c;Web3作为下一代互联网的概念正逐渐引起人们的关注和探索。本文将深入探讨新数字时代的启示&#xff0c;揭开Web3的神秘之路&#xff0c;并探讨其在未来的发展前景。 1. Web3的定义与特点 Web3是对互联网未来发…

安装docker 并搭建出一颗爱心树

1、docker介绍 Docker 是⼀个开源的容器运⾏时软件&#xff08;容器运⾏时是负责运⾏容器的软件&#xff09;&#xff0c;基于 Go 语 ⾔编写&#xff0c;并遵从 Apache2.0 协议开源。 Docker可以让开发者打包⾃⼰的应⽤以及依赖到⼀个轻量的容器中&#xff0c;然后发布到任何…

如何通过针对iOS的动态分析技术绕过反调试机制

在这篇文章中&#xff0c;我们将跟大家介绍和分析一种针对iOS的新型安全研究技术&#xff0c;该技术能够让iOS应用程序的调试过程更加轻松&#xff0c;并解决那些可能会延缓我们步伐的阻碍。 如果你要对一个采用了反调试技术的iOS应用程序或二进制文件进行调试的话&#xff0c;…