洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目描述
每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节。
由于牛棚不太大,FJ通过指定奶牛必须遵循的穿越路线来确保奶牛的乐趣。为了实现这个让奶牛在牛棚里来回穿梭的方案,FJ在第i号隔间上张贴了一个“下一个隔间”Next_i(1<=Next_i<=N),告诉奶牛要去的下一个隔间;这样,为了收集它们的糖果,奶牛就会在牛棚里来回穿梭了。
FJ命令奶牛i应该从i号隔间开始收集糖果。如果一只奶牛回到某一个她已经去过的隔间,她就会停止收集糖果。
在被迫停止收集糖果之前,计算一下每头奶牛要前往的隔间数(包含起点)。
输入格式
第1行 整数n。
第2行到n+1行 每行包含一个整数 next_i 。
输出格式
n行,第i行包含一个整数,表示第i只奶牛要前往的隔间数。
样例解释
有4个隔间
隔间1要求牛到隔间1
隔间2要求牛到隔间3
隔间3要求牛到隔间2
隔间4要求牛到隔间3
牛1,从1号隔间出发,总共访问1个隔间;
牛2,从2号隔间出发,然后到三号隔间,然后到2号隔间,终止,总共访问2个隔间;
牛3,从3号隔间出发,然后到2号隔间,然后到3号隔间,终止,总共访问2个隔间;
牛4,从4号隔间出发,然后到3号隔间,然后到2号隔间,然后到3号隔间,终止,总共访问3个隔间。
输入输出样例
4 1 3 2 3
1 2 2 3 本来以为是水题,被洛谷坑了2333。如果暴力模拟可以拿40分,之后想到记忆化搜索。记忆化搜索对于树是非常方便的,但无法处理环,那就先tarjan缩点。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<stack> 5 using namespace std; 6 const int N=100005; 7 int n,tim,dcnt,next[N],nxt[N],dfn[N],low[N],belong[N],sz[N],ans[N]; 8 bool instk[N],vis[N]; 9 stack<int>stk; 10 void tarjan(int u) 11 { 12 dfn[u]=low[u]=++tim; 13 instk[u]=1; 14 stk.push(u); 15 if(next[u]) 16 { 17 if(dfn[next[u]]==0) 18 { 19 tarjan(next[u]); 20 low[u]=min(low[u],low[next[u]]); 21 } 22 else if(instk[next[u]]) 23 low[u]=min(low[u],dfn[next[u]]); 24 } 25 if(low[u]==dfn[u]) 26 { 27 ++dcnt; 28 while(1) 29 { 30 int t=stk.top(); 31 stk.pop(); 32 instk[t]=0; 33 belong[t]=dcnt; 34 sz[dcnt]++; 35 if(t==u) 36 break; 37 } 38 } 39 } 40 void dfs(int u) 41 { 42 if(nxt[u]) 43 { 44 if(!vis[nxt[u]]) 45 { 46 dfs(nxt[u]); 47 vis[nxt[u]]=1; 48 } 49 ans[u]=ans[nxt[u]]+sz[u]; 50 } 51 else 52 { 53 ans[u]=sz[u]; 54 vis[u]=1; 55 } 56 } 57 int main() 58 { 59 scanf("%d",&n); 60 for(int i=1;i<=n;i++) 61 { 62 scanf("%d",&next[i]); 63 if(next[i]==i) 64 next[i]=0; 65 } 66 for(int i=1;i<=n;i++) 67 if(!dfn[i]) 68 tarjan(i); 69 for(int i=1;i<=n;i++) 70 if(next[i]&&belong[i]!=belong[next[i]]) 71 nxt[belong[i]]=belong[next[i]]; 72 for(int i=1;i<=dcnt;i++) 73 if(!vis[i]) 74 { 75 dfs(i); 76 vis[i]=1; 77 } 78 for(int i=1;i<=n;i++) 79 printf("%d\n",ans[belong[i]]); 80 return 0; 81 }
转载于:https://www.cnblogs.com/fantasquex/p/9342708.html
洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm相关推荐
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(有环图的搜索)
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 Every year in Wisconsin the cows celebrate t ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
对于一个牛,它存在两种状态:1.处于联通分量 2.不处于联通分量.对于处于联通分量的牛,求出联通分量的大小:对于不处于联通分量的牛,求出其距离联通分量的路程+联通分量大小. 不同的联通分量,染上不同的 ...
- [USACO08DEC]在农场万圣节Trick or Treat on the Farm【Tarja缩点+dfs】
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- [USACO08DEC]在农场万圣节Trick or Treat on the Farm
https://www.luogu.org/problemnew/show/P2921 C++版本一 朴素 一.为了实现这一方法,我们对每个点设置两个属性: 1.颜色 (color)(color) : ...
- Luogu 2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
基环树森林,然而我比较菜,直接tarjan找环. 发现缩点之后变成了DAG,每一个点往下走一定会走到一个环,缩点之后搜一遍看看会走到哪个环以及那个环的编号是多少,答案就是环的$siz$$ + $要走的 ...
- 洛谷 P2921 在农场万圣节Trick or Treat on the Farm (tarjan求强连通分量)
洛谷 P2921 在农场万圣节Trick or Treat on the Farm (tarjan求强连通分量) 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N&l ...
- 洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解
题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定 ...
- 洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver
洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver 题目描述 FJ和他的奶牛们正在计划离开小镇做一次长的旅行,同时FJ想临时地关掉他的农场以节省一些金钱. ...
- 洛谷[P2921]在农场万圣节
题目传送门OvO 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100000)N(1<=N<=100000)N(1<=N<=100 ...
最新文章
- 2021年大数据ELK(十一):Elasticsearch架构原理
- MYSQL explain详解[转载]
- oracle 202,Oracle Certification 1Z0-202题库
- [概率期望DP]JZOJ 4212 我想大声告诉你
- FICO 最常用配置表
- 如何训练孩子上厕所(初级篇)
- Chrome中输入框默认样式移除
- 怎样看虚拟主机的服务器,虚拟主机怎么查看服务器类型
- uva 11995——I Can Guess the Data Structure!
- Linux命令之find命令中的-mtime参数
- 获取机器安装.NET版本的几种方式
- php socket_create_listen(),socket_create_listen()
- python包含html5么_Python3 集合
- 图片和文本置顶显示的方法
- 龙格-库塔(Runge-Kutta)
- js处理null和underfined
- 2021-2027全球与中国外部谷仓门市场现状及未来发展趋势
- 如何评价一个新技术——以Docker为例
- c语言静态检测工具,静态代码检测工具---PC-lint(for c/c )
- 正确理解以下名词及其含义:(1)源程序,目标程序,可执行程序(2)程序编辑,程序编译,程序连接(3)程序,程序模块,程序文件 (4)函数,主函数,被调用函数,库函数
热门文章
- 图说苹果工作站-MAC PRO
- 存储新技术之“连续数据保护(CDP)”
- [导入]Ms Ajax Lib- Object 类型扩展
- 眼睛看特定角度有闪光的处理办法
- 数据湖三种方案的流行度调查
- pyspark的rdd直接写入mysql
- Property or method xxxx is not defined on the instance but referenced during render.
- Understanding Clouds from Satellite Images语义分割比赛中train_test_split与stratify配合使用
- 云主机上mysql密码重置
- Python学习笔记——glob模块【文件、路径操作】