热门标签 | 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



推荐阅读
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
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社区 版权所有