洛谷 P2921 在农场万圣节
https://www.luogu.org/problemnew/show/P2921
开始感觉这题30行代码就可以搞定,还是太菜啦,还是乖乖地写了tarjan。
对图进行缩点,那么这个强联通分量中的点多余一个,那么这个环中的每个点的最长路径就是这个环(因为每个点只有一条连出去的有向边)。
对于不在环中的点,每个点搜索,当搜到一个环时,直接返回这个环中点的个数,搜不到环返回1.
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n,m,a[],ans[],sum[];
bool vis[];
int low[],dfn[],Index;
bool in[];
int stack[],top;
int belong[],cnt;
void tarjan(int u)
{
low[u]=dfn[u]=++Index;
in[u]=;stack[++top]=u;
if(a[u])
{
int v=a[u];
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(in[v]&&low[u]>dfn[v])low[u]=dfn[v];
}
if(low[u]==dfn[u])
{
int p;
++cnt;
do
{
p=stack[top--];
belong[p]=cnt;
in[p]=;
}while(p!=u);
}
}
int dfs(int x)
{
if(ans[x])return ans[x];
ans[x]=;
if(a[x])ans[x]+=dfs(a[x]);
return ans[x];
}
int main()
{
int x;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]==i)ans[i]=;
}
for(int i=;i<=n;i++)
if(!dfn[i])tarjan(i);
for(int i=;i<=n;i++)sum[belong[i]]++;
for(int i=;i<=n;i++)
if(sum[belong[i]]>)ans[i]=sum[belong[i]];
for(int i=;i<=n;i++)
if(!ans[i])dfs(i);
for(int i=;i<=n;i++)printf("%d\n",ans[i]);
}
洛谷 P2921 在农场万圣节的更多相关文章
- 洛谷 P2921 在农场万圣节Trick or Treat on the Farm题解
题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定 ...
- 缩点【洛谷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
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 ...
- 【洛谷P2921】[USACO08DEC]在农场万圣节
在农场万圣节Trick or Treat on the Farm 题目链接 题解:首先,将原图缩点,变为DAG, 然后在DAG上记忆化搜索即可 #include<iostream> #in ...
- [洛谷P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目大意:给你一张有向图,每个点最多一条出边,问从每个开始,走多少步会到一个已经过的点 题解:$tarjan$缩点,然后建反图$DP$ 卡点:无 C++ Code: #include <cstd ...
- 洛谷P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每 ...
- 洛谷 P3079 [USACO13MAR]农场的画Farm Painting
P3079 [USACO13MAR]农场的画Farm Painting 题目描述 After several harsh winters, Farmer John has decided it is ...
随机推荐
- [Xcode 实际操作]一、博主领进门-(7)使用不同类型的iOS模拟器
目录:[Swift]Xcode实际操作 本文将演示使用不同类型的iOS模拟器. 点击[运行]按钮,打开模拟器,并预览当前的项目. 当向苹果商店提交应用时,也需要同时提交应用的截图. 对当前的应用的界面 ...
- [Xcode 实际操作]九、实用进阶-(15)屏幕截屏:截取当前屏幕上的显示内容
目录:[Swift]Xcode实际操作 本文将演示如何截取屏幕画面,并将截取图片,存入系统相册. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UI ...
- SecureCRT 退格键等不好用
1.MongoDB Shell中退格键使用的问题. 利用SecureCRT工具访问linux的时候,在使用MongoDB的交互式shell的时候,退格键(Backspace)无法使用,导致无法修改输入 ...
- cmd - 使用curl命令的注意点
前言 最近在cmd中使用curl命令来测试rest api,发现有不少问题,这里记录一下. 在cmd中使用curl命令的注意事项 json不能由单引号包括起来 json数据里的双引号要用反斜杠\转义 ...
- python 操作mysql数据库存
代码: 说明:由于我本机没有安装数据库,数据库是在远程访问的,故地址不是localhost # __author__ = 'STEVEN' import pymysql host = '10.1.1. ...
- form表单提交转为ajax方式提交
<form action="xxx" method="get"> //action的值是请求的url地址 <div class="f ...
- UWP 画一个圆形头像
经常需要做一个圆形头像的样式,like this 做法很简单,直接上xaml. <Ellipse Width=" Height="> <Ellipse.Fill& ...
- Java EE学习笔记(一)
spring入门程序: 1.导入Spring的4个基础包以及commons-logging的JAR包复制到lib目录中 2.src->com.itheima.ioc包下: ①UserDao.ja ...
- Ubuntu 解决E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
今天想在ubuntu上配置nodejs的环境.结果用apt install安装软件时出现报错. $ sudo apt-get update 会得到下面错误提示: E: 无法获得锁 /var/lib/a ...
- WPF学习04:2D绘图 使用Shape绘基本图形
我们将使用Shape进行基本图形绘制. 例子 一个可移动的矩形方框: XAML代码: <Window x:Class="Shape.MainWindow" xmlns=&qu ...