热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LGOJP2921[USACO08DEC]在农场万圣节TrickorTreatontheFarm

今天我来给大家带来一片蒟蒻题解~~真香LGOJP2921[USACO08DEC]在农场万圣节TrickorTreatontheFarm题目描述每年,在威斯康星州&#x

今天我来给大家带来一片蒟蒻题解 ~~真香

LGOJ P2921  [USACO08DEC]在农场万圣节Trick or Treat on the Farm

 


 

题目描述

 

每年&#xff0c;在威斯康星州&#xff0c;奶牛们都会穿上衣服&#xff0c;收集农夫约翰在N(1<&#61;N<&#61;100&#xff0c;000)个牛棚隔间中留下的糖果&#xff0c;以此来庆祝美国秋天的万圣节。

 

由于牛棚不太大&#xff0c;FJ通过指定奶牛必须遵循的穿越路线来确保奶牛的乐趣。为了实现这个让奶牛在牛棚里来回穿梭的方案&#xff0c;FJ在第i号隔间上张贴了一个“下一个隔间”Next_i(1<&#61;Next_i<&#61;N)&#xff0c;告诉奶牛要去的下一个隔间&#xff1b;这样&#xff0c;为了收集它们的糖果&#xff0c;奶牛就会在牛棚里来回穿梭了。

 

FJ命令奶牛i应该从i号隔间开始收集糖果。如果一只奶牛回到某一个她已经去过的隔间&#xff0c;她就会停止收集糖果。

 

在被迫停止收集糖果之前&#xff0c;计算一下每头奶牛要前往的隔间数&#xff08;包含起点&#xff09;。

输入格式

第1行 整数n。

第2行到n&#43;1行 每行包含一个整数 next_i 。

输入输出样例

in 1: 

4
1
3
2
3

out 1:

1

2

2

3      

 


 

思路引导&#xff1a;

  clearly&#xff0c;我们可以发现cow是一圈圈走的。看到圈我们想到什么&#xff1f;对&#xff0c;是环。怎样快速地判断一根环呢&#xff1f;不会是O(n)查找吧。。。这时&#xff0c;我们就可以使用一种特别简便的数据结构&#xff0c;就是并查集。并查集的算法研究&#xff0c;可以追溯到20世纪30年代&#xff0c;上海黑帮黑吃黑。不同于黑帮互殴的是&#xff0c;并查集的帮派只看coder的意思&#xff0c;没有流血伤亡&#xff0c;全是光荣革命&#xff0c;通过coder的淳淳教导&#xff08;启发式搜索&#xff09;&#xff0c;还可以加快黑帮合并的速度&#xff0c;还有一种更加strong的办法&#xff0c;叫做路径压缩&#xff0c;可以是黑帮的每个人都直接听命于老大&#xff0c;时间复杂度直接降到了常数级别&#xff01;这么好的方法&#xff0c;我们想到了&#xff0c;当然要用一用啦。在这道题中&#xff0c;我们的用法又略有不同。话不多说&#xff0c;上代码。代码有详解。 

 

/*Name: Trick or Treat on the Farm Author: JackDate: 05-04-19 20:38Description:
    节点&#xff1a;房间。
    环&#xff1a;cow按指示走直到不得不停时走过节点组成的环
*/
#include

using namespace std;
const int maxn &#61; 1e6&#43;5;
int dfn[maxn],inloop[maxn],col[maxn],nxt[maxn],loopsize[maxn];
//dfn:时间戳&#xff0c;记录访问到当前节点时的时间&#xff0c;辅助inloop
//inloop:入环时间戳&#xff0c;记录访问到这个环时&#xff0c;时间是多少
//col:并查集&#xff0c;记录每个节点的祖先。本题较特殊&#xff0c;不是用具体的节点作为祖先&#xff0c;而是用一个概念“牛”&#xff0c;将牛的编号作为祖先&#xff0c;所以并查集一般的操作都用不了。As the matter of fact&#xff0c;本题是可以用节点作为祖先解决的。但那样思路会有点卡壳&#xff0c;所以还是hack掉了。
//nxt&#xff1a;每个节点连接的下一个节点
//loopsize&#xff1a;环的节点个数
int n;void init(){scanf("%d",&n);for(int i&#61;1;i<&#61;n;i&#43;&#43;)scanf("%d",&nxt[i]);memset(dfn,0,sizeof(dfn));memset(col,0,sizeof(col));memset(loopsize,0,sizeof(loopsize));//输入以及都清空。
}
void work(){for(int now&#61;1;now<&#61;n;now&#43;&#43;){//按每只牛循环。for(int i&#61;now,cnt&#61;0;;i&#61;nxt[i],cnt&#43;&#43;){
        //按访问顺序访问
if(!col[i]){col[i]&#61;now;//这个房间归这头牛了dfn[i]&#61;cnt;//时间戳就是cnt}else if(col[i]&#61;&#61;now){//如果回到了自己的地盘
          loopsize[now]
&#61;cnt-dfn[i];
          //环的大小&#61;访问最后一个点的时间-访问第一个点的时间inloop[now]
&#61;dfn[i];
          //入环时间&#61;访问第一个点的时间printf(
"%d\n",cnt);break;} else {
          //如果来到了他人的领地&#xff0c;就扩充自己的领地loopsize[now]
&#61;loopsize[col[i]];//环的大小&#61;他人领地的大小
          inloop[now]
&#61;cnt&#43;max(inloop[col[i]]-dfn[i],0);
          //入环时间&#61;访问最后一个点的时间加后面这一串&#xff0c;留作思考题&#xff0c;自己想

          printf("%d\n",inloop[now]&#43;loopsize[now]);
         
break;
       }
}
    }
}

int main(){
   init();
   work();
  
return 0;
}
完美结束

 

 

 

OK&#xff0c;谢谢观赏&#xff0c;各位看官觉得写得好的点个赞呗~~

 

 

转:https://www.cnblogs.com/yangxuejian/p/10779419.html



推荐阅读
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 依然最钟爱《People Have the Power》,强烈推荐大家聆听这首经典之作
    尽管今日情绪低落,我在音乐库中反复筛选,最终还是选择了《People Have the Power》来激励自己。这首歌不仅旋律动听,歌词也充满力量,能够带给人正能量。强烈建议大家找来聆听,体验其独特的魅力。《People Have the Power》虽然不是出自专辑《Horses》,但同样是一首不可多得的经典之作。 ... [详细]
  • MSP430F5438 ADC12模块应用与学习心得
    在最近的实践中,我深入研究了MSP430F5438的ADC12模块。尽管该模块的功能相对简单,但通过实际操作,我对MSP430F5438A和MSP430F5438之间的差异有了更深刻的理解。本文将分享这些学习心得,并探讨如何更好地利用ADC12模块进行数据采集和处理。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
author-avatar
手机用户2502854107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有