LG2921 [USACO2008DEC]Trick or Treat on the Farm 内向基环树
问题描述
题解
发现一共有 \(n\) 个点,每个点只有一条出边,即只有 \(n\) 条边,于是就是一个内向基环树。
\(\mathrm{Tarjan}\) 缩点。
但是这个题比较猥琐的就是有自环。
所以断定一个强联通分量 \(i\) 是环的条件是 \(size_i>1\) 。
然后记搜求答案,特判自环。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
template <typename Tp>
void read(Tp &x){
	x=0;char ch=1;int fh;
	while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
	if(ch=='-') ch=getchar(),fh=-1;
	else fh=1;
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	x*=fh;
}
const int maxn=100007;
int n;
int son[maxn],fa[maxn];
int dfn[maxn],low[maxn],ind;
bool ins[maxn];
int sta[maxn],top;
int bel[maxn],cnt;
int size[maxn];
int spe;
void tarjan(int x){
	dfn[x]=low[x]=++ind,ins[x]=1,sta[++top]=x;
	if(dfn[son[x]]){
		if(ins[son[x]]) low[x]=min(low[x],dfn[son[x]]);
	}
	else{
		tarjan(son[x]);
		low[x]=min(low[x],low[son[x]]);
	}
	if(dfn[x]==low[x]){
		++cnt;
		while(sta[top]!=x){
			bel[sta[top]]=cnt;
			ins[sta[top]]=0;--top;
			++size[cnt];
		}
		++size[cnt];
		ins[x]=0,bel[x]=cnt;--top;
	}
}
int ans[maxn];
int dfs(int x){
	if(size[bel[x]]>1) return ans[x]=size[bel[x]];
	if(ans[x]) return ans[x];
	return ans[x]=dfs(son[x])+1;
}
int main(){
	read(n);
	for(int i=1;i<=n;i++){
		read(son[i]);fa[son[i]]=i;
		if(son[i]==i) ans[i]=1;
	}
	for(int i=1;i<=n;i++){
		if(!dfn[i]) tarjan(i);
		if(size[bel[i]]>1) spe=bel[i];
	}
	for(int i=1;i<=n;i++){
		if(!ans[i]) dfs(i);
	}
	for(int i=1;i<=n;i++)
		printf("%d\n",ans[i]);
	return 0;
}
												
											LG2921 [USACO2008DEC]Trick or Treat on the Farm 内向基环树的更多相关文章
- BZOJ1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
		
1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4 ...
 - 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
		
1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4 ...
 - LGOJ P2921  [USACO08DEC]在农场万圣节Trick or Treat on the Farm
		
今天我来给大家带来一片蒟蒻题解 ~~真香 LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上 ...
 - 【BZOJ】1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
		
[算法]基环树DP [题意]给定若干有向基环树,每个点能走的最远路径长度. [题解] 参考:[BZOJ1589]Trick or Treat on the Farm 基环树裸DP by 空灰冰魂 考虑 ...
 - 缩点【洛谷P2921】 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
		
[洛谷P2921] [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
 - 「USACO08DEC」「LuoguP2921」在农场万圣节Trick or Treat on the Farm(tarjan
		
题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定 ...
 - P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(Tarjan+记忆化)
		
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
 - 洛谷——P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
		
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
 - C++ 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题解
		
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 分析: 这棵树上有且仅有一个环 两种情况: 1.讨论一个点在环上,如果在则答案与它指向点相同, 2 ...
 
随机推荐
- day_92_11_14flask的启动和orm,反向生成model
			
一.自定义命令. 在flask中也可以将应用改写成可以使用命令的形式,需要用到模块: pip install flask-script 使用关键字manage使得其能使用终端启动: from flas ...
 - 算法问题实战策略  SORTGAME
			
地址 https://algospot.com/judge/problem/read/SORTGAME 解答 常规BFS是会超时的 按照书上的提示 应该是打表(居然还有提倡打表的题目) tle 代码 ...
 - html公用头部和尾部
			
这个方式比较简单,样式和js也有效果,还有object和iframe方式 效果图,可以看出公共的样式对于引入的文件也有效果,在加载完文件后js也是有效果的 index.html header.html ...
 - 最热门的 10 个 Java 微服务框架
			
1.Spring Boot Java 构建 Spring 应用程序已经有很长一段时间了,Spring Boot 是 Spring 的一个特定版本,它通过对配置细节的处理,使微服务构建更加简便.创建 S ...
 - IT兄弟连 HTML5教程 HTML语言的语法 1
			
HTML是文本类型的语言,和其他任何一门语言相比,语法都是最简单的.但在编写HTML文件时,必须遵循HTML的语法规则.一个完整的HTML文件由标题.段落.列表.表格.文本,即嵌入的各种对象所组成,这 ...
 - Octave Convolution详解
			
前言 Octave Convolution来自于这篇论文<Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural ...
 - JavaScript判断对象和数组
			
在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象,接口返回的data数据应该统一返回json对象,便于扩展),而在有数据时返回的是json ...
 - make 命令与 Makefile
			
make 是一个工具程序,通过读取 Makefile 文件,实现自动化软件构建.虽然现代软件开发中,集成开发环境已经取代了 make,但在 Unix 环境中,make 仍然被广泛用来协助软件开发.ma ...
 - 练手WPF(二)——2048游戏的简易实现(上)
			
1.创建游戏界面编辑MainWindow.xaml,修改代码如下: <Window.Resources> <Style TargetType="Label"> ...
 - 计时 答题 demo
			
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...