BZOJ 1589 采集糖果
23333怎么调了一晚上。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxv 100500
#define maxe 100500
using namespace std;
struct edge
{
int v,nxt;
}e[maxe];
int n,xx[maxv],g[maxv],nume=,dfn[maxv],low[maxv],times=,stack[maxv],top=,dp[maxv],ret=,hash[maxv];
bool vis[maxv];
void addedge(int u,int v)
{
e[++nume].v=v;
e[nume].nxt=g[u];
g[u]=nume;
}
void tarjan(int x)
{
vis[x]=true;dfn[x]=low[x]=++times;stack[++top]=x;
for (int i=g[x];i;i=e[i].nxt)
{
int v=e[i].v;
if (!vis[v])
{
tarjan(v);
low[x]=min(low[x],low[v]);
}
else low[x]=min(low[x],dfn[v]);
}
if (dfn[x]==low[x])
{
int p=top,cnt=;ret++;
while (dfn[stack[p]]!=low[stack[p]])
{
cnt++;
p--;
}
cnt++;
while (dfn[stack[top]]!=low[stack[top]])
{
hash[stack[top]]=ret;
if (cnt!=) dp[stack[top]]=cnt;
top--;
}
hash[stack[top]]=ret;
if (cnt!=) dp[stack[top]]=cnt;
top--;
}
}
int find(int x)
{
if (dp[x]) return dp[x];
else if (xx[x]==x) {dp[x]=;return ;}
else return dp[x]=find(xx[x])+;
}
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",&xx[i]);
if (i!=xx[i])
addedge(i,xx[i]);
}
for (int i=;i<=n;i++)
{
if (!vis[i])
tarjan(i);
}
for (int i=;i<=n;i++)
{
if (i==xx[i])
{
dp[i]=;
printf("1\n");
}
else printf("%d\n",find(i));
}
return ;
}
BZOJ 1589 采集糖果的更多相关文章
- BZOJ 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
Description 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N(1≤N≤100000)个牛棚里转悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大, ...
- 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 ...
- 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 ...
- 【BZOJ】1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
[算法]基环树DP [题意]给定若干有向基环树,每个点能走的最远路径长度. [题解] 参考:[BZOJ1589]Trick or Treat on the Farm 基环树裸DP by 空灰冰魂 考虑 ...
- bzoj 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【tarjan+记忆化搜索】
对这个奇形怪状的图tarjan,然后重新连边把图变成DAG,然后记忆化搜索即可 #include<iostream> #include<cstdio> using namesp ...
- bzoj千题计划161:bzoj1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
http://www.lydsy.com/JudgeOnline/problem.php?id=1589 tarjan缩环后拓扑排序上DP #include<cstdio> #includ ...
- [BZOJ 1045] [HAOI2008] 糖果传递
题目链接:BZOJ 1045 Attention:数据范围中 n <= 10^5 ,实际数据范围比这要大,将数组开到 10^6 就没有问题了. 我们先来看一下下面的这个问题. 若 n 个人坐成一 ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- BZOJ 1045: [HAOI2008] 糖果传递 数学
1045: [HAOI2008] 糖果传递 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1045 Description 有n个小朋友坐 ...
随机推荐
- Java 8怎么了:局部套用vs闭包
[编者按]本文作者为专注于自然语言处理多年的 Pierre-Yves Saumont,Pierre-Yves 著有30多本主讲 Java 软件开发的书籍,自2008开始供职于 Alcatel-Luce ...
- datagridview 点击列标题排序
开发winform中,平时经常用到数据列表,我们大多选用datagridview,但是此控件本身没有排序的功能.参阅网上资料.留下标记,以后备用. datagridview的数据显示一般是通过数据绑定 ...
- jvm 之 国际酒店 8 月 19 一次full GC 导致的事故
事故经过: 1 15:18收到短信报警:国际酒店调用OMS queryGorderOrderList方法失败:成单接口调用OMS获取token失败. 2 查看checkList发现15:18开始发 ...
- struts2实现选择i18n语言选择切换
[新手学习记录,仅供参考!] 1.项目准备 首先当然是我们得创建一个struts2的web项目,并且已经实现了一个简单的功能. 以下通过登录功能来举例说明. 2.指定全局国际化资源文件 在struts ...
- C#获取根目录的方法集合
1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法2.AppDomain.Curren ...
- Centos环境下部署游戏服务器-简介
一.前言 在接触这个操作系统之前我一直使用的是ubuntu和mac os,这次由于游戏是测试版本,没有专业的运维人员去做这件事情,只能我这个稍微懂一点linux的人来做这件事情了.由于涉及到 ...
- DB2行转列、列转行等操作
DB2 行转列 ----start 在网上看到这样一个问题:(问题地址:http://www.mydb2.cn/bbs/read.php?tid=1297&page=e&#a) 班级 ...
- jboss内存查看管理 .
jboss内存查看管理 标签: jbossjavagenerationjvmclassjar 2009-04-09 14:47 4248人阅读 评论(2) 收藏 举报 本文章已收录于: // ' ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- SQL Server ->> 分区表上创建唯一分区索引
今天在读<Oracle高级SQL编程>这本书的时候,在关于Oracle的全局索引的章节里面有一段讲到如果对一张分区表创建一条唯一索引,而索引本身也是分区的,那就必须把分区列也加入到索引列表 ...