C++ 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题解
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
分析:
这棵树上有且仅有一个环
两种情况:
1.讨论一个点在环上,如果在则答案与它指向点相同,
2.不在就等于它指向点答案+1,具体就直接大力dfs,
如何求环长度:
终点深度-起点深度=终点起点距离
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
const int maxn=;
int n;
int cnt=;
int a[maxn];
int h[maxn];
int ans[maxn];
int read() //快读
{
int x=,f=;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-;c=getchar();}
while(isdigit(c)){x=x*+c-'';c=getchar();}
return x*f;
}
void dfs(int i,int deep)
{
h[i]=deep; //该点深度
if(ans[a[i]]) ans[i]=ans[a[i]]+; //若指向点有答案,而自己无答案,则自己不再环上。要+1
else if(h[a[i]]) //若形成环
{
ans[i]=(h[i]-h[a[i]]+); //刷新该点答案
int k=a[i];
while(i!=k) //刷新环内所有答案 ,直到回到原点
{
ans[k]=ans[i];
k=a[k];
}
}
else
{
dfs(a[i],deep+);
if(!ans[i]) ans[i]=ans[a[i]]+; //自身肯定不再环上,所以+1
}
}
void solve()
{
for (int i=;i<=n;i++)
{
if(!ans[i]) dfs(i,); //若此点未有涉及(无答案),就dfs
}
for (int i=;i<=n;i++)
printf("%d\n",ans[i]);
}
void work()
{
n=read();
for(int i=;i<=n;i++)
{
a[i]=read();
}
solve();
}
int main()
{
work();
return ;
}
C++ 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题解的更多相关文章
- 洛谷——P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
- 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- [洛谷P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目大意:给你一张有向图,每个点最多一条出边,问从每个开始,走多少步会到一个已经过的点 题解:$tarjan$缩点,然后建反图$DP$ 卡点:无 C++ Code: #include <cstd ...
- 洛谷 2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
[题解] 就是基环外向树森林找环,然后从环向外统计size就可以了. #include<cstdio> #include<cstring> #include<algori ...
- LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
今天我来给大家带来一片蒟蒻题解 ~~真香 LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上 ...
- 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 记忆化搜索dfs
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
对于一个牛,它存在两种状态:1.处于联通分量 2.不处于联通分量.对于处于联通分量的牛,求出联通分量的大小:对于不处于联通分量的牛,求出其距离联通分量的路程+联通分量大小. 不同的联通分量,染上不同的 ...
- [P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm (记忆化搜索/DP?,Tarjan?)
第一看还以为是水题 随便打了一个bfs只有40分…… 然后开始颓废 #include<bits/stdc++.h> #define N 100005 using namespace std ...
随机推荐
- 微信小程序知识集锦
1.自定义属性/获取属性值 自定义属性: <view bindtap='shopPost' data-myid='item.goods_id' ></view> 获取属性: s ...
- python_简单的DB统计
import numpy as npimport pylab as pldates=['20170314','20170315','20170316','20170317','20170318','2 ...
- WPF特效-鱼游动动画
原文:WPF特效-鱼游动动画 实现思路: 通过VisualBrush Binding方式获取鱼局部图像,在Viewport3D中创建ModelVisual3D块并把获取到的局部 ...
- C#实现下载的几种方式举例
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- https://www.jianshu.com/p/4da29fa310d2
wampserver显示红色.橙色的解决方案 拿笔的小鑫 关注 2016.10.15 14:38* 字数 2643 阅读 5083评论 0喜欢 3赞赏 1 </br></br&g ...
- XAML的命名空间
原文:XAML的命名空间 一个最简单的XAML例子 <Window x:Class="WpfApplication1.MainWindow" xmlns="ht ...
- PowerDesigner 在通过jdbc连接数据库时 Could not Initialize JavaVM!
最近用到PowerDesigner的逆向工程,从数据库中逆向生成模型,本想使用odbc连接的,但是需要安装驱动,mysql的还好弄,oracle对我来讲实在是有些麻烦,看到能用jdbc连接,就想试试, ...
- UWP入门(十)--获取文件属性
原文:UWP入门(十)--获取文件属性 重要的 API StorageFile.GetBasicPropertiesAsync StorageFile.Properties StorageItemCo ...
- 向github提交本地项目
首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: https://gi ...
- CS224n笔记二:word2vec
如何表示词语的意思 语言学中meaning近似于"指代,代指,符号". 计算机中如何处理词语的意思 过去一直采用分类词典,计算语言学中常见的方式时WordNet那样的词库,比如NL ...