【题解】P2921 在农场万圣节(tarjan)

洛谷P2921 Trick or Treat on the Farm G 题意:每一只奶牛都从一个棚栏出发,如果走到一个地方,该地方走过的话,就停止,请问每一只奶牛最多可以走过都是个棚栏。 思路,先找出该有向图中所有的环,然后对每一个环进行缩点,计算每一个环的大小,如果走到一个环中的任意一个点后,一定会出现重复走到一个点,所以就加上这个额环的大小,然后停止,因为要计算所有点可以走到最远的距离,所以可以记忆化搜索的方式进行优化。` #include <cstdio> #include <cmath> #include <stack> #inclu 阅读详情

这个题可以用tarjan解决,将染色后的点标记为tarjan的那个点,特判如果出发点等于目标点 答案就是1,如果要求的那个点在强连通分量里面,我们就输出其所含的cnt(也就是强连通分量所代表的环的大小)。如果目标点不在强连通分量里,我们就从该点进行扩展,记录下扩展的步数step。如果扩展到一个强连通分量内,答案就是step+该强连通分量的环的大小,break掉即可。最后输出每一个点的答案。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=100010;
int n;
int head[maxn],nnext[maxn*2],to[maxn*2];
int tot,top,index,ink;
int dfn[maxn],low[maxn],cnt[maxn],stack[maxn],ans[maxn],color[maxn];
bool b[maxn],instack[maxn];
void add(int x,int y)
{
	tot++;
	nnext[tot]=head[x];
	head[x]=tot;
	to[tot]=y;
}
void tarjan(int x)
{
	dfn[x]=low[x]=++index;
	stack[++top]=x;
	b[x]=true;
	instack[x]=true;
	for(int i=head[x];i;i=nnext[i])
	{
		int y=to[i];
		if(!b[y])
		{
			tarjan(y);
			low[x]=min(low[x],low[y]);
		}
		else if(instack[y])
		{
			low[x]=min(low[x],low[y]);
		}
	}
	if(dfn[x]==low[x])
	{
		int k;
		do
		{
			k=stack[top];
			instack[k]=false;
			color[k]=x;
			top--;
		}while(stack[top+1]!=x);
	}
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int tmp;
		cin>>tmp;
		add(i,tmp);
		if(tmp==i) ans[i]=1;
	}
	for(int i=1;i<=n;i++)
	{
		if(!b[i]) 
		{
			tarjan(i);
		}
	}
	for(int i=1;i<=n;i++)
	{
		cnt[color[i]]++;
	}
	for(int i=1;i<=n;i++)
	{
		if(cnt[color[i]]!=1)
		{
			ans[i]=cnt[color[i]];
		}
	}	
	for(int i=1;i<=n;i++)
	{
		if(ans[i]==0)
		{
			int step=1;
			int x=i;
			while(1)
			{
				for(int j=head[x];j;j=nnext[j])
				{
					x=to[j];
				}
				if(ans[x]!=0)
				{
					ans[i]=step+ans[x];
					break;
				}
				else step++;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<ans[i]<<endl;
	}
	return 0;
}

 

UE4打包为Framework库嵌入iOS原生工程 阅读详情

相关推荐

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

P2921 [USACO08DEC] Trick or Treat on the Farm G

DFS

原原的博客 183

DL-FWI基础入门培训视频学习1、2

DL-FWI基础知识

shengMio的博客 710

在农场万圣节

在农场万圣节 题目描述: 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节。 由于牛棚不太大,FJ通过指定奶牛必须遵循的穿越路线来确保奶牛的乐趣。为了实现这个让奶牛在牛棚里来回穿梭的方案,FJ在第i号隔间上张贴了一个“下一个隔间”Next_i(1<=Next_i<=N),告诉奶牛要去的下...

weixin_43846217的博客 870

手把手教你用Copilot插件在Obsidian里免费接入DeepSeek-R1(附硅基流动API密钥获取)

本文详细介绍了如何通过Copilot插件在Obsidian中免费接入DeepSeek-R1模型,实现智能知识管理。从硅基流动API密钥获取到插件配置,再到高级功能调优和实战应用技巧,手把手教你打造AI驱动的个人知识库。

weixin_33686714的博客 2798

C/C++ 静态代码检查工具cppCheck

Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误;Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等;Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为;使用--suppress如果你想要忽略某些警告,可以在命令行中使用 --suppress 选项。

贝勒里恩的博客 4952

洛谷 P2921

洛谷P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm   一个点只能有两种情况,在环当中和不在环当中。所以思路是采用tarjan算法,缩点,记录各个环的大小,在环内的点的答案就是环的大小,环外面的距离就是点到环的距离与环的大小。 #include<iostream> #include<vector> #include&lt...

qq_43560101的博客 321

cuRobo 入门教程(一)基于CUDA的机器人运动规划加速库

cuRobo是一款基于CUDA加速的机器人算法库,提供运动学计算、碰撞检测、轨迹优化等功能。该库采用并行优化技术,在GPU上实现高效运算,比现有方案快60倍。cuRobo支持多种机器人模型和环境表示,包含正向/逆向运动学、无碰撞轨迹生成、模型预测控制等核心算法,并可与IsaacSim等仿真平台集成。其特点包括:1) 支持多种碰撞检测方式(长方体/网格/深度图像);2) 提供批量环境处理和实时世界更新;3) 通过CUDA Graphs加速优化迭代;4) 在Jetson Orin等平台实现毫秒级运动规划。安装支

2506_90492529的博客 1931

洛谷P2921

刚看到这道题的时候,没有在意复杂度,就直接暴力了,我也真是憨了,这可是提高省选组的题……后来看看算法标签说是记忆化搜索,再仔细看看题,这不就是每个顶点出度只有一的有向图嘛,包括自环,且是多个连通块,然后,每一个顶点停止遍历的时候一定是进入了一个环内或者自身是某个环的一部分,否则遍历是不会停止的,那么所有的数据应该类似这种情况 接下来咋搞呢?想半天也没有整明白,写了一个假算法,理论上是没问题的...

嘘...一只bug 234

YOLO26改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 359

优快云独家 | 全网首发 | 《目标检测蓝皮书》目录

10篇文章从目标检测小白变大神

Coding... 3万+

洛谷 P2921 在农场万圣节Trick or Treat on the Farm (tarjan求强连通分量)

洛谷 P2921 在农场万圣节Trick or Treat on the Farm (targan求强连通分量) 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节。 由于牛棚不太大,FJ通过指定奶牛必须遵循的穿越路线来确保奶牛的乐趣。为了实现这个让奶牛在牛棚里来回穿梭的方案,FJ在第i号隔...

weixin_43179892的博客 284

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(一)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)A. genvarB. integerC. wireD.reg参考答案:AA.综合的时候,define无法跨文件列表生效B.宏定义文件最好放在一个文件中集中管理,防止出现不同的项目需要修改不同的宏定义值,但是却漏改了某些地方的情况出现。

qq_42135020的博客 5781

P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(有环图的搜索)

P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 Every year in Wisconsin the cows celebrate the USA autumn holiday of Halloween by dressing up in costumes and collecting candy that Farmer John ...

海马有力量的博客 255

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

万圣节又要到了(大雾),可恶机智的农场主又要给欺骗奶牛们发糖果了。 题目描述 Every year in Wisconsin the cows celebrate the USA autumn holiday of Halloween by dressing up in costumes and collecting candy that Farmer John leaves in the N...

weixin_30814319的博客 195

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm tarjan算法

题目链接: https://www.luogu.org/problem/P2921 算法: tarjan 注意: 1:low[maxn]存:同一个连通分量中可以回到的节点的最小时间戳,即dfn的值 思路: 1:这道题目的本质就是tarjan算法 2:如果开始时这个节点就是在一个节点数大于2的环中,即一个连通分量中那么所要求的间隔数ans[i]就等于这个连通分量所包含的节点个数 3...

aiwo1376301646的博客 345

P2921 [USACO08DEC]在农场万圣节[SCC缩点]

题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节。 由于牛棚不太大,FJ通过指定奶牛必须遵循的穿越路线来确保奶牛的乐趣。为了实现这个让奶牛在牛棚里来回穿梭的方案,FJ在第i号隔间上张贴了一个“下一个隔间”Next_i(1<=Next_i<=N),告诉奶牛要去的下一个隔...

weixin_30396699的博客 176

洛谷 P2921 在农场万圣节

https://www.luogu.org/problemnew/show/P2921 开始感觉这题30行代码就可以搞定,还是太菜啦,还是乖乖地写了tarjan。 对图进行缩点,那么这个强联通分量中的点多余一个,那么这个环中的每个点的最长路径就是这个环(因为每个点只有一条连出去的有向边)。 对于不在环中的点,每个点搜索,当搜到一个环时,直接返回这个环中点的个数,搜不到环返回1. ...

weixin_30512785的博客 155

洛谷P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(tarjan缩点+记忆化)

先上链接:点击打开链接昨天上课偶然发现洛谷上也有题没有过,寒假有限几天写过题的杰作,当时只知道tarjan很厉害,什么求强联通分量怎么做完全不造。当然离上一次看强联通、点连通什么的过了快两周了,其实是有点忘记了,不过怎么写看着lrj大致还是知道的。题意:每个牛棚有个后继牛棚,每走一个牛棚可以加1,然后求出从每个牛棚出发可以得到多少的值。 当时寒假只会暴力dfs,好吧我连dfs都是抠脚的。反正也不知...

qq_37439324的博客 438

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

P2921在农场万圣节

Loi_littlechai的博客 288

洛谷P2921/BZOJ1589[USACO08DEC]在农场万圣节Trick or Treat on the Farm

题目描述 Every year in Wisconsin the cows celebrate the USA autumn holiday of Halloween by dressing up in costumes and collecting candy that Farmer John leaves in the N (1 <= N <= 100,000) stalls...

Eirlys的博客 1051

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

给你一张无向图,保证每个点的出边只有一条 求出从每个点出发,直到访问到已经访问过的点时经过的点数 tarjan线缩点,环会被缩成一个强连通分量,不难发现环上的所有点的答案都是环长 最后来一遍dfs,求出所有点到环的距离 第一次dfs没写return,WA的莫名其妙 代码: #include <bits/stdc++.h> #define int long l...

aogengbin3685的博客 98

【洛谷2921】 [USACO2008 Dec] 在农场万圣节(Tarjan+记忆化搜索)

点此看题面

CXR的博客 323

P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm - Tarjan+拓扑DP

传送门 tarjan缩点后进行拓扑dp求出从点i出发的最大点权和,由于是dfs遍历,所以相当于从终点走到点i的最大点权和。 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const...

dmqqndlx85675的博客 134

洛谷P2921 在农场万圣节Trick or Treat on the Farm

记忆化搜索,tarjan强连通分量→缩点

engineoid的博客 155

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

题目描述 Every year in Wisconsin the cows celebrate the USA autumn holiday of Halloween by dressing up in costumes and collecting candy that Farmer John leaves in the N (1 Because the barn is not s

蒟蒻的博客 452
上一篇: 【题解】codevs P2822 爱在心中(tarjan缩点)
下一篇: 【题解】洛谷P1119 灾后重建(floyd)
Rem_Inory
博客等级 码龄8年 4粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值