Description

Neverland是个神奇的地方,它由一些岛屿环形排列组成,每个岛上都生活着之中与众不同的物种。但是这些物种都有一个共同的生活习性:对于同一个岛上的任意两个生物,他们有且仅有一个公共朋友,即对同一岛上的任意两个生物a和b有且仅有一个生物c既是a的朋友也是b的朋友,当然某些岛上也可能会只有一个生物孤单地生活着。这一习性有一个明显的好处,当两个生物发生矛盾的时候,他们可以请那个唯一的公共朋友来裁决谁对谁错。

另外,岛与岛之间也有交流,具体来说,每个岛都会挑选出一个最聪明的生物做代表,然后这个生物与他相邻的两个岛的代表成为朋友。

不行的是,A世界准备入侵Neverland,作为Neverland的守护者,Lostmonkey想知道在一种比较坏的情况下Never的战斗力。因为和朋友并肩作战,能力会得到提升,所以Lostmonkey想知道在不选出一对朋友的情况下Neverland的最大战斗力。即选出一些生物,且没有一对生物是朋友,并且要求它们的战斗力之和最大。

Input

第一行包含用空格隔开的两个整数n和m,分别表示Neverland的生物种数和朋友对数。接下来的m行描述所有朋友对,具体来说,每行包含用空格隔开的两个整数a和b,表示生物a和生物b是朋友(每对朋友只出现一次)。第m+2行包含用空格隔开的n个整数,其中第i个整数表示生物i的战斗力Ai。输入数据保证4<=n<=100000,1<=a,b<=n,1<=m<=200000,-1000<=Ai<=1000.

Output

仅包含一个整数,表示满足条件的最大战斗力。

Sample Input

6 7
1 2
2 3
3 4
4 1
3 6
3 5
5 6
20 10 30 15 20 10

Sample Output


50
题解:又一道仙人掌,感觉比上一题要简单,
假设没有环的话,就是一道常规DP,f[i]表示选i,g[i]表示不选。
f[i]=∑(g[son]+val[x])
g[i]=∑max(f[son],g[son])
但如果放在环上的话,就有些蛋疼了。
比如rt->x1->x2->rt这个环,我要选rt的话,x1,x2都不能选。
所以,我们DP两遍,第一遍表示不选rt,第二遍表示选。
u1表示可以取,u0不可以取,v1取了后的值,v0没取的值
通过给u1的初始值来枚举选不选x1
则v1=u1+f[x],v0=u0+g[x]
u1=v0,u0=max(v1,v0)

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=100008;
struct node{int y,next;
}sa[400010];int first[N],len=0;
int n,m;
void ins(int x,int y)
{len++;sa[len].y=y;sa[len].next=first[x];first[x]=len;
}
int dfn[N],low[N],dep[N],fa[N],cnt=0,f[N],g[N];
void dp(int root,int x)
{int u1=0,u0=0,v1,v0;//u1表示可以取,u0不可以取,v1取了后的值,v0没取的值for(int i=x;i!=root;i=fa[i]){v1=u1+f[i];v0=u0+g[i];u1=v0;u0=max(v1,v0);} //因为x取了,所以root不能取 g[root]+=u0;u1=-99999999,u0=0;for(int i=x;i!=root;i=fa[i]){v1=u1+f[i];v0=u0+g[i];u1=v0;u0=max(v1,v0);} //因为u1太小,所以x没有取 f[root]+=u1;
}int val[N];
void dfs(int x)
{cnt++;dfn[x]=low[x]=cnt;for(int i=first[x];i!=-1;i=sa[i].next){int y=sa[i].y;if(y!=fa[x]){if(!dfn[y]){dep[y]=dep[x]+1;fa[y]=x;dfs(y);low[x]=min(low[x],low[y]);}else low[x]=min(low[x],dfn[y]);}}f[x]=val[x];for(int i=first[x];i!=-1;i=sa[i].next){int y=sa[i].y;if(fa[y]!=x&&dfn[x]<dfn[y])dp(x,y);}
}int main()
{memset(first,-1,sizeof(first));scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int a,b;scanf("%d%d",&a,&b);ins(a,b);ins(b,a);}for(int i=1;i<=n;i++)scanf("%d",&val[i]);dfs(1);printf("%d",max(f[1],g[1])); } 

1487: [HNOI2009]无归岛相关推荐

  1. [HNOI2009]无归岛

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

  2. 无归岛【仙人掌图 最大权独立集】

    题目链接 BZOJ 1487 在解决这个问题之前,我们可以先了解一下这个问题:仙人掌图的最大独立集.稍有些许差别,不带权值. 好了,回到这个问题上来,那么此题的题意讲的那么繁杂,到底讲的是个什么玩意儿 ...

  3. 2017.9.8 无归岛 思考记录

    这题面又有毒.. 题目不清楚.而且它好像还用三行文字解释了一个三元环.. 然后图不就是这样(强迫症勿看)?: 然后由于交点只有一个.所以直接子树dp. 注意对环处理一定是从子树根节点判断环处理.不然会 ...

  4. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

  5. AJAX学习基础:简单介绍数据岛使用方法

        数据岛指的是存在Html网页中的xml代码段,它在Html中形成了一个数据的集合,数据岛允许我们在Html网页中集成xml, 对xml编写脚本.     数据岛有它特有的形式,由标记xml开始 ...

  6. 两个程序员的泰国普吉岛之行

    十一长假后,我和女朋友一起去了普吉岛游玩(作为两个程序员,不能每天敲代码,也应该放松下自己),玩的很Happy,也是我们第一次出国,所以更带有许多兴奋.也许是由于玩的太High,导致回家后的第二天,就 ...

  7. luogu P3393 逃离僵尸岛(点权最短路 + 多源BFS)

    P3393 逃离僵尸岛 最短路,有点的不能到达我们就直接把他的权值赋值为INF即可. bfs预处理一下每个点的危险程度. 因为这里没有边权是点权,我们可以把边权转化为两端点的权值和,或者直接跑点权最短 ...

  8. IslandViewer4|基因组岛在线预测

    IslandViewer 4 基因组岛(genomic island)是微生物基因组中可水平转移的基因簇.根据功能基因不同,可将其分为抗性岛.代谢岛.共生岛.毒力岛等. 基因组岛的预测主要分为两类: ...

  9. ISME:中国林科院亚林所袁志林组揭示盐碱地根系深色有隔内生真菌种群基因岛的正向选择机制...

    基因岛遗传分化导致了盐生植物根系真菌黑色素合成的分子进化 Divergence of a genomic island leads to the evolution of melanization i ...

  10. ue4 无限地图_用UE4建出来的虚拟世界精灵岛,比现实世界的美上十倍!

    水晶石教育 中国卓著的视觉艺术教育高端品牌 在加拿大艾伯塔省的贾斯珀贾斯珀国家公园中,有一个会变幻颜色的玛琳湖,湖中有一座小岛,就是大名鼎鼎的精灵岛(Spirit Island). 现实中的精灵岛是加 ...

最新文章

  1. 【MediaPipe】(4) AI视觉,远程手势调节电脑音量,附python完整代码
  2. 02、在层级未知情况下通过递归查找子物体
  3. DDD为何叫好不叫座?兼论DCI与业务分析的方法论
  4. 牛逼了 这 7 个 Python 入门实战项目,我打 99.99 分
  5. django2连接mysql_django2连接mysql
  6. 带参数标签的取值方法
  7. 将权限引入系统的探索
  8. HTML中的父选择器,html – css4中是否有父选择器?
  9. 初学关键段容易忽略的问题
  10. 马化腾评 ofo 溃败原因;京东到家否认裁员;王兴质押全部摩拜股权 | 极客头条...
  11. 简单的移动端图片裁剪vue插件[旋转,平移,缩放,印花]
  12. 微信小程序 获取php值,微信小程序如何获取javascript里的数据
  13. 设计模式7------装饰者模式(Decorator Pattern)-------结构模式
  14. 南昌工程学院c语言试题,南昌工程学院概率论与数理统计试题库部分题目
  15. 果粉沸腾,iPhone6领衔苹果最顶级明星阵容
  16. Nginx反向代理解决跨域问题(个人学习总结)
  17. python打开文件管理器
  18. 1034: 夏季促销 C语言
  19. 风口上的“低代码”:是技术变革?还是另一个风险敞口?
  20. 【免费SEO工具分享】长尾关键字挖掘器:外贸拓词长尾关键词挖掘工具

热门文章

  1. 通用计算机不能直接硬件乘法,2018年4月自考《计算机组成原理》真题
  2. Quartus 入门
  3. 坚果pro3刷miui_坚果Pro3刷机包
  4. US1M-ASEMI高效恢复二极管US1M
  5. 解决Postman报错Could not send request
  6. NetWare网络操作系统
  7. 产品研发项目管理软件哪个好? 1
  8. windows删除文件时需要管理员权限的方法
  9. 同步时钟、异步时钟----概念解析
  10. KIS专业版-即时库存查询自定义开发