bzoj千题计划161:bzoj1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
http://www.lydsy.com/JudgeOnline/problem.php?id=1589
tarjan缩环后拓扑排序上DP
#include<cstdio>
#include<iostream>
#include<algorithm> #define N 100001 using namespace std; int to[N]; int m;
int bl[N],siz[N]; int st[N],top;
int id,dfn[N],low[N];
bool vis[N]; int FRONT[N],TO[N],NXT[N],TOT;
int in[N]; int dp[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void tarjan(int x)
{
dfn[x]=low[x]=++id;
vis[x]=true;
st[++top]=x;
if(!dfn[to[x]])
{
tarjan(to[x]);
low[x]=min(low[x],low[to[x]]);
}
else if(vis[to[x]]) low[x]=min(low[x],dfn[to[x]]);
if(dfn[x]==low[x])
{
++m;
while(st[top]!=x)
{
vis[st[top]]=false;
bl[st[top]]=m;
siz[m]++;
top--;
}
vis[x]=false;
bl[x]=m;
siz[m]++;
top--;
}
} void add(int u,int v)
{
TO[++TOT]=v; NXT[TOT]=FRONT[u]; FRONT[u]=TOT;
in[v]++;
} void topsort()
{
top=;
for(int i=;i<=m;++i)
{
if(!in[i]) st[++top]=i;
dp[i]=siz[i];
}
int now,t;
while(top)
{
now=st[top--];
for(int i=FRONT[now];i;i=NXT[i])
{
t=TO[i];
dp[t]+=dp[now];
in[t]--;
if(!in[t]) st[++top]=t;
}
}
} int main()
{
int n;
read(n);
for(int i=;i<=n;++i) read(to[i]);
for(int i=;i<=n;++i)
if(!dfn[i]) tarjan(i);
for(int i=;i<=n;++i)
if(bl[i]!=bl[to[i]]) add(bl[to[i]],bl[i]);
topsort();
for(int i=;i<=n;++i) cout<<dp[bl[i]]<<'\n';
}
bzoj千题计划161:bzoj1589: [Usaco2008 Dec]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 ...
- 【强连通分量缩点】【记忆化搜索】bzoj1589 [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果
缩成DAG f(i)表示以i为起点的最长路 #include<cstdio> #include<cstring> #include<algorithm> #incl ...
- [BZOJ1589] [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果(tarjan缩点 + 记忆化搜索)
传送门 先用tarjan缩点,再记忆话搜索一下 #include <stack> #include <cstdio> #include <cstring> #inc ...
- 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 ...
- 【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 采集糖果
Description 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N(1≤N≤100000)个牛棚里转悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大, ...
- bzoj 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【tarjan+记忆化搜索】
对这个奇形怪状的图tarjan,然后重新连边把图变成DAG,然后记忆化搜索即可 #include<iostream> #include<cstdio> using namesp ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
随机推荐
- Python中,os.listdir遍历纯数字文件乱序如何解决
Python中,os.listdir遍历纯数字文件乱序如何解决 日常跑深度学习视觉相关代码时,常常需要对数据集进行处理.许多图像文件名是利用纯数字递增的方式命名.通常所用的排序函数sort(),是按照 ...
- js作用域相关笔记
1.js引擎.编译器.作用域. 引擎:负责JS全过程的编译和执行: 编译器:负责语法分析和代码生成: 作用域:负责收集并维护声明组成的查询,以及当前执行代码对这些变量的访问权限(简言之,作用域就是用于 ...
- chdir
<?php //获得当前目录 echo getcwd(); echo "<br />"; //改变为 images 目录 chdir("images&q ...
- java 构造器二
- UVA 12633 Super Rooks on Chessboard(FFT)
题意: 给你一个R*C的棋盘,棋盘上的棋子会攻击,一个棋子会覆盖它所在的行,它所在的列,和它所在的从左上到右下的对角线,那么问这个棋盘上没有被覆盖的棋盘格子数.数据范围R,C,N<=50000 ...
- Java中,一切皆是对象!为何数据类型中还分为:基本类型和对象?
Java中一切皆是对象!这句话没错,因为八种基本类型都有对应的包装类(int的包装类是Integer),包装类自然就是对象了. 基本类型一直都是Java语言的一部分,这主要是基于程序性能的考量, 基本 ...
- laravel4 「时间戳」问题
默认 Eloquent 会自动维护数据库表的 created_at 和 updated_at 字段.只要把这两个「时间戳」字段加到数据库表, Eloquent 就会处理剩下的工作.如果不想让 Eloq ...
- WampServer3.0允许局域网访问配置教程
wamp server 下的Apache默认设置是不允许外网访问和局域网访问的,而直接搜索 wamp局域网访问配置,出现都是一些旧版本的wamp的配置信息,最新版本3.0.X需要使用以下配置方法: 配 ...
- Access数据库通过ODBC导出到Oracle的两个小问题ora-24801\Ora-01401
问题描述:从access通过odbc导出到oracle出现 ora-24801 非法值 错误 与 Ora-01401 值过大的错误 问题分析:access里面的字段类型为“备注”,导入到ora ...
- 【刷题】BZOJ 3551 [ONTAK2010]Peaks加强版
Description [题目描述]同3545 Input 第一行三个数N,M,Q. 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到b有一条困难值为c的双向路径. 接下来 ...