缩成DAG

f(i)表示以i为起点的最长路

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define N 100001
int n,To[N],mem[N];
vector<int>vs;
int v[N],first[N],next[N],en;
void AddEdge(int U,int V)
{
v[++en]=V;
next[en]=first[U];
first[U]=en;
}
int v2[N],firs2[N],nex2[N],e2;
void AddEdg2(int U,int V)
{
v2[++e2]=V;
nex2[e2]=firs2[U];
firs2[U]=e2;
}
int w[N],cmp[N],tot;
bool vis[N];
void dfs(int U)
{
vis[U]=1;
for(int i=first[U];i;i=next[i])
if(!vis[v[i]])
dfs(v[i]);
vs.push_back(U);
}
void df2(int U)
{
cmp[U]=tot;
++w[tot];
for(int i=firs2[U];i;i=nex2[i])
if(!cmp[v2[i]])
df2(v2[i]);
}
void scc()
{
for(int i=1;i<=n;++i)
if(!vis[i])
dfs(i);
vector<int>::iterator it=vs.end(); --it;
while(1)
{
if(!cmp[*it])
{
++tot;
df2(*it);
}
if(it==vs.begin())
break;
--it;
}
}
int f(int U)
{
if(mem[U]) return mem[U];
mem[U]=w[U];
for(int i=first[U];i;i=next[i])
mem[U]=max(mem[U],f(v[i])+w[U]);
return mem[U];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&To[i]);
AddEdge(i,To[i]);
AddEdg2(To[i],i);
}
scc();
memset(first,0,sizeof(first));
memset(next,0,sizeof(next));
memset(v,0,sizeof(v));
en=0;
for(int i=1;i<=n;++i)
if(cmp[i]!=cmp[To[i]])
AddEdge(cmp[i],cmp[To[i]]);
for(int i=1;i<=n;++i)
printf("%d\n",f(cmp[i]));
return 0;
}

【强连通分量缩点】【记忆化搜索】bzoj1589 [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果的更多相关文章

  1. [BZOJ1589] [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果(tarjan缩点 + 记忆化搜索)

    传送门 先用tarjan缩点,再记忆话搜索一下 #include <stack> #include <cstdio> #include <cstring> #inc ...

  2. 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 ...

  3. 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 ...

  4. bzoj 1589: [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果【tarjan+记忆化搜索】

    对这个奇形怪状的图tarjan,然后重新连边把图变成DAG,然后记忆化搜索即可 #include<iostream> #include<cstdio> using namesp ...

  5. ZOJ3795 Grouping(强连通分量+缩点+记忆化搜索)

    题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通. 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组. 能在同一组 ...

  6. LightOJ1417 Forwarding Emails(强连通分量+缩点+记忆化搜索)

    题目大概是,每个人收到信息后会把信息发给他认识的一个人如此下去,问一开始要把信息发送给谁这样看到信息的人数最多. 首先找出图中的SCC并记录每个SCC里面的点数,如果传到一个SCC,那么里面的人都可以 ...

  7. UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)

    题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点. 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了. 那么问题就简单了, ...

  8. BNU 20860——Forwarding Emails——————【强连通图缩点+记忆化搜索】

    Forwarding Emails Time Limit: 1000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...

  9. poj3592 强连通+记忆化搜索

    题意:有一片 n*m 的矿地,每一格有矿.或这传送门.或者挡路岩石.除了岩石不能走以外,其他的格子都能够向右或向下走,走到一个非岩石的格子.对于每一个矿点,经过它就能得到它的所有矿石,而对于每一个传送 ...

随机推荐

  1. CSS中的块级元素、内联元素(行内元素)

    Block element 块级元素    顾名思义就是以块显示的元素,高度宽度都是可以设置的.比如我们常用 的<div>.<p>.<ul>默认状态下都是属于块级元 ...

  2. 设置查看java的源程序

    1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES" 2. ...

  3. [51nod1009]数字1的数量

    解题关键:数位dp,对每一位进行考虑,通过过程得出每一位上1出现的次数 1位数的情况: 在解法二中已经分析过,大于等于1的时候,有1个,小于1就没有. 2位数的情况: N=13,个位数出现的1的次数为 ...

  4. HDU2546饭卡---(DP 经典背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory L ...

  5. 【BZOJ2832&&3874】宅男小C [模拟退火][贪心]

    宅男小C Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 众所周知,小C是个宅男,所以他的每 ...

  6. 【BZOJ2663】灵魂宝石 [二分]

    灵魂宝石 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description “作为你们本体的灵魂,为了能够更好的 ...

  7. laravel 获得各个根文件夹路径的方法及路由的一些使用

    各个根文件夹路径的方法 APP目录: app_path(); config目录: config_path(); public目录: public_path(); storage目录: storage_ ...

  8. UpdateData的用法(转)

    原文转自 https://blog.csdn.net/ddjj_1980/article/details/51452289 UpdateData(TRUE)——刷新控件的值到对应的变量.(外部输入值交 ...

  9. Python学习笔记 chapter 2基础

    程序输入 >>> print('%s is number %d'%('Python', 1))Python is number 1 输出重定向有问题(待定) 文本输入>> ...

  10. boost::function的简单实现

    前言 boost::function和boost:bind是一对强大的利器.相信用过的童鞋多少有些体会. 虽然平时在用boost::function,但是用的时候心中总会一些不安,因为不知道它是怎么实 ...