分析:

树形DP中的一种,基环树DP

针对每一个环跑DP,f[i],g[i]分别表示选或者不选,之后我们注意每次遍历的时候,不要重复遍历。

附上代码:

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdlib>
using namespace std;
#define N 1000005
struct node
{
int to,next;
}e[N<<1];
int head[N],cnt,f[N],g[N],fa[N],now,n,ra[N],rb[N];
void add(int x,int y)
{
e[cnt].to=y;
e[cnt].next=head[x];
head[x]=cnt++;
return ;
}
int find(int x){if(fa[x]==x)return x;return fa[x]=find(fa[x]);}
void dfs(int x)
{
int minn=1<<30;
g[x]=0;
for(int i=head[x];i!=-1;i=e[i].next)
{
int to1=e[i].to;
if(to1!=now)dfs(to1);
g[x]+=max(f[to1],g[to1]);
minn=min(minn,max(f[to1],g[to1])-g[to1]);
}
f[x]=g[x]+1-minn;
}
int main()
{
memset(head,-1,sizeof(head));
scanf("%d",&n);int cnt=0;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if(find(x)!=find(i))
{
add(x,i);
fa[fa[x]]=fa[i];
}else ra[++cnt]=x,rb[cnt]=i;
}
int ans=0;
for(int i=1;i<=cnt;i++)
{
dfs(ra[i]);now=ra[i];
dfs(rb[i]);
int t=f[rb[i]];
f[ra[i]]=g[ra[i]]+1;
dfs(rb[i]);ans+=max(t,g[rb[i]]);
}
printf("%d\n",ans);
return 0;
}

  

创世纪 BZOJ3037 & [Poi2004]SZP BZOJ2068的更多相关文章

  1. 【BZOJ3037/2068】创世纪/[Poi2004]SZP 树形DP

    [BZOJ3037]创世纪 Description applepi手里有一本书<创世纪>,里面记录了这样一个故事……上帝手中有着N 种被称作“世界元素”的东西,现在他要把它们中的一部分投放 ...

  2. [bzoj3037/2068]创世纪[Poi2004]SZP_树形dp_并查集_基环树

    创世纪 SZP bzoj-3037/2068 Poi-2004 题目大意:给你n个物品,每个物品可以且仅可以控制一个物品.问:选取一些物品,使得对于任意的一个被选取的物品来讲,都存在一个没有被选取的物 ...

  3. Poetize4 创世纪

    3037: 创世纪 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 123  Solved: 66[Submit][Status] Description ...

  4. 为创世纪图书馆(Library Genesis)作镜像

    简介 Library Genesis的Wikipedia条目中的介绍是: Library Genesis or LibGen is a search engine for articles and b ...

  5. 编程哲学之C#篇:01——创世纪

    我们能否像神一样地创建一个世界? 对于创建世界而言,程序员的创作能力最接近于神--相对于导演,作家,漫画家而言,他们创建的世界(作品)一旦完成,就再也不会变化,创建的角色再也不会成长.而程序员创建的世 ...

  6. CH6401 创世纪

    6401 创世纪 0x60「图论」例题 描述 上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i].现在,上帝要把它们中的 ...

  7. 图形学创世纪——写在SIGGRAPH 40年的边上

    40年的边上" title="图形学创世纪--写在SIGGRAPH 40年的边上"> 前言: SIGGRAPH是由ACM SIGGRAPH(美国计算机协会计算机图形 ...

  8. JZOJ 3929. 【NOIP2014模拟11.6】创世纪

    3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...

  9. T1创世纪(原创)

    创世纪 这是我的第一道原创题 题解: 这道题的核心算法是:加维度的最短路+贪心 状态:\(dis[i][j][t][a]\)表示在 \(t\) 时,到达 \((i,j)\) ,当前共造\(a\)只&q ...

随机推荐

  1. 从零开始学习html(十五)css样式设置小技巧——下

    六.垂直居中-父元素高度确定的单行文本 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8&quo ...

  2. JS性能优化 之 FOR循环

    FOR 循环我们用的真的是太多了,但你是否关注过它的优化写法呢?记录下: 1. 最最常规写法,没有任何不妥 for (var i = 0; i < 10; i++) { // do someth ...

  3. MySQL的binlog2sql闪回

    从MySQL binlog解析出你要的SQL.根据不同选项,你可以得到原始SQL.回滚SQL.去除主键的INSERT SQL等. 用途=========== * 数据快速回滚(闪回)* 主从切换后新m ...

  4. 在eclipse中方便的比较各个语言 资源文件—jinto的安装

    一.下载与安装jinto Eclipse插件的插件,用来解决资源文件的国际化问题 用jinto编辑器打开properties文件后,就可以方便的建立出各国和各种语言的资源文件,同时可以方便的对比书写各 ...

  5. JDK5 新特性之 可变参数的方法(2)---asList

    > Arrays.asList(T - a)方法的使用 >UnsupportedOperationException分析     Arrays.asList(T - a)方法的使用 pac ...

  6. 56_实现类似spring的可配置的AOP框架

    > config.properties  配置文件   key=类名 > BeanFactory  Bean工厂,负责得到bean  getBean("xxx") &g ...

  7. Azure DevKit(AZ3166)源码找不到头文件问题

    Get “Error Presented: #include errors detected” when opening a project The error message is Error Pr ...

  8. October 20th 2017 Week 42nd Friday

    My life is in these books. Read these and know my heart. 我的人生就在这些书中,读完他们就能读懂我的心. Some people say tha ...

  9. DevExpress03、GridControl

    设计数据源并绑定字段: 数据源可以是实现下列接口之一的任何类型: IList 接口,包括一维数组.List<T>等! IListSource 接口,例如,DataTable 和 DataS ...

  10. C#中的事件(event)处理机制

    委托 语法 [访问修饰符] delegate 返回类型 委托名(); 委托的特点 类似于C++函数指针,但它是类型安全的:委托允许将方法作为参数进行传递:委托可用于定义回调方法:委托可以链接在一起:如 ...