P4410 [HNOI2009]无归岛

显然这还是一个仙人掌图

对于同一个岛上的任意两个生物,他们有且仅有一个公共朋友

要求求最大独立集,和树形dp一样,遇到环时单独提出来处理一下就好了

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL maxn=1e6;
const LL inf=0x3f3f3f3f;
inline LL Read(){
LL x=0,f=1; char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9')
x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x*f;
}
struct node{
LL to,next;
}dis[maxn];
LL n,m,num,tot;
LL dp[maxn][2],fa[maxn],head[maxn],dfn[maxn],low[maxn],a[maxn];
inline void Add(LL u,LL v){
dis[++num]=(node){v,head[u]},head[u]=num;
}
inline void Dp(LL u,LL v){
LL sum0(0),sum1(0),sum2(0),sum3(0);
for(LL i=v;i!=u;i=fa[i]){
sum3=sum0+dp[i][1],
sum2=sum1+dp[i][0],
sum0=sum2,
sum1=max(sum2,sum3);
}
dp[u][0]+=sum1;
sum0=-inf,sum1=0;
for(LL i=v;i!=u;i=fa[i]){
sum3=sum0+dp[i][1],
sum2=sum1+dp[i][0],
sum0=sum2,
sum1=max(sum2,sum3);
}
dp[u][1]+=sum0;
}
void Tarjan(LL u){
low[u]=dfn[u]=++tot;
dp[u][1]=a[u];
for(LL i=head[u];i;i=dis[i].next){
LL v=dis[i].to;
if(!dfn[v])
fa[v]=u,
Tarjan(v),
low[u]=min(low[u],low[v]);
else if(v!=fa[u])
low[u]=min(low[u],dfn[v]);
if(dfn[u]<low[v])
dp[u][1]+=dp[v][0],
dp[u][0]+=max(dp[v][0],dp[v][1]);
}
for(LL i=head[u];i;i=dis[i].next){
LL v=dis[i].to;
if(fa[v]!=u&&dfn[u]<dfn[v])
Dp(u,v);
}
}
int main(){
n=Read(),m=Read();
for(LL i=1;i<=m;++i){
LL u=Read(),v=Read();
Add(u,v),Add(v,u);
}
for(LL i=1;i<=n;++i)
a[i]=Read();
Tarjan(1);
printf("%lld",max(dp[1][0],dp[1][1]));
return 0;
}

P4410 [HNOI2009]无归岛的更多相关文章

  1. 【BZOJ1487】[HNOI2009]无归岛(动态规划)

    [BZOJ1487][HNOI2009]无归岛(动态规划) 题面 BZOJ 洛谷 题解 哪来的这么多废话啊,直接说一个仙人掌得了. 然后就是要你求仙人掌最大独立集了.(随便蒯份原来的代码就过了) 不过 ...

  2. bzoj1487 [HNOI2009]无归岛

    Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛 上的任意两个生物,他们有且仅有 ...

  3. 【刷题】BZOJ 1487 [HNOI2009]无归岛

    Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛上的任意两个生物,他们有且仅有一 ...

  4. [HNOI2009]无归岛

    Description Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种.但是这些物种都有一个共同的生活习性:对于同一个岛上的任意两个生物,他们有且仅有一 ...

  5. 【BZOJ1487】[HNOI2009]无归岛(仙人掌 DP)

    题目: BZOJ1487 分析: 题目中给定的图一定是一棵仙人掌(每条边最多属于一个环),证明如下: 先考虑单独一个岛的情况.第一,一个岛一定是一张「弦图」,即任意一个大小超过 3 的环都至少有 1 ...

  6. 2019.02.07 bzoj1487: [HNOI2009]无归岛(仙人掌+树形dp)

    传送门 人脑转化条件过后的题意简述:给你一个仙人掌求最大带权独立集. 思路:跟这题没啥变化好吗?再写一遍加深记忆吧. 就是把每个环提出来分别枚举环在图中的最高点选还是不选分别dpdpdp一下即可,时间 ...

  7. 【题解】HNOI2009无归岛

    这题真的是无语了,在哪个岛上根本就没有任何的用处……不过我是画了下图,感受到一定是仙人掌,并不会证.有谁会证的求解…… 如果当做仙人掌来做确实十分的简单.只要像没有上司的舞会一样树形dp就好了,遇到环 ...

  8. Luogu-4410 [HNOI2009]无归岛

    裸的仙人掌最大独立子集,结果一个zz的错误让我调了好久... \(-inf\)开始设为\(0x7fffffff\)结果\(A_i\)有负数一加就炸了 #include<cstdio> #i ...

  9. BZOJ1487 [HNOI2009]无归岛 【仙人掌dp】

    题目链接 BZOJ1487 题解 就是一个简单的仙人掌最大权独立集 还是不会圆方树 老老实实地树形Dp + 环处理 #include<iostream> #include<cstdi ...

随机推荐

  1. MongoDB安装及环境配置

    一.什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供 ...

  2. J.U.C之Condition

    此篇博客所有源码均来自JDK 1.8 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait().notify()系列方法可以实现等待/通知模式.在Java SE5 ...

  3. elementUI表单验证

    elementUI表单验证非常方便,我们直奔主题: <template> <el-form ref="orderForm" :model="orderF ...

  4. element-ui 表格错行

    //表格错行 .el-table th.gutter { display: table-cell !important }

  5. ABAP-JCO服务端连接问题

    公司网络服务加域,若SAP服务器后端未配置端口号映射,则外部服务器注册JCO服务监听需要调整 # server jco.server.connection_count=5 jco.server.gwh ...

  6. ios 日常开发常用宏定义

      #pragma mark - 字体.颜色相关 #define kFONT_SIZE(f) [UIFont systemFontOfSize:(f)] #define kFONT_BOLD_SIZE ...

  7. linux uniq命令用法

    uniq命令: 对指定的ASCII文件或标准输入进行唯一性检查,以判断文本文件中重复出现的行,常用于分析日志:查看tcp各个状态连接数,ip或域名连接数排名等等场景,一般与 sort 命令结合使用. ...

  8. 基于FTP 的本地Yum服务器配置

    服务器端 环境如下 Vmware14CentOS 7.6 192.168.20.81 server 192.168.20.81 client 1.配置yum源 mount /dev/cdrom /me ...

  9. 爬虫:selenium请求库

    一.介绍 二.安装 三.基本使用 四.选择器 五.等待元素被加载 六.元素交互操作 七.其他 八.项目练习 一.介绍 # selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requ ...

  10. ubuntu 修改环境变量(PATH)

    1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/ ...