[UOJ 28][IOI 2014]Friend(DP)
来源:互联网 发布:普通话考试难不难知乎 编辑:程序博客网 时间:2024/06/06 14:19
题目链接
http://uoj.ac/problem/28
题目大意
有一个点带权的无向图,最开始只有点0,随后点
1. I方式:只将
2. M方式:只将
3. W方式:将
求最终的图的最大点独立集。
思路
整个问题可以倒过来看,相当于从最后一次操作开始,对每次操作的边
建立一个新的树,每个点
这样就相当于在一棵树上做最大点独立集,可以用树上DP解决。
不妨设
对于I类边
对于M类边
对于W类边
代码
#include "friend.h"#define MAXV 110000int max(int a,int b){ if(a>b) return a; return b;}int f[MAXV],g[MAXV]; //f[i]=可以选点i,子树能得到的最大权值,g[i]=不选点i,子树能得到的最大权值// Find out best sampleint findSample(int n,int confidence[],int host[],int protocol[]){ for(int i=0;i<n;i++) f[i]=confidence[i]; for(int i=n-1;i>0;i--) //对第i个点进行操作 { int fa=host[i]; //i在新建的树中的父亲是fa if(!protocol[i]) //I连法,i与其父亲连 { f[fa]+=g[i]; g[fa]+=max(f[i],g[i]); } else if(protocol[i]==1) //M连法,i与其父亲的邻居连 { f[fa]=max(f[fa]+max(f[i],g[i]),g[fa]+f[i]); g[fa]+=g[i]; } else //W连法,i与其父亲以及其父亲的邻居连 { f[fa]=max(f[fa]+g[i],g[fa]+f[i]); g[fa]+=g[i]; } } return max(f[0],g[0]);}
- [UOJ 28][IOI 2014]Friend(DP)
- [UOJ 26][IOI 2014]Game(构造题)
- 1994 IOI 简单dp
- UOJ#37.【清华集训2014】主旋律 状压DP
- 【IOI 1999】橱窗布置 (DP)
- BZOJ 3246 IOI 2013 Dreaming 树形DP
- [树形DP] IOI 2012 Ideal city
- IOI 1999 花店橱窗布置(DP)
- UVA11722Joining with Friend概率dp
- 树形dp(IOI 2005河流代码理解)
- 【uoj#149】【NOIP2015】子串 DP
- 【UOJ#149】【NOIP2015】子串【计数DP】
- [UOJ#149][NOIP2015]子串(dp)
- [期望DP] UOJ#311. 【UNR #2】积劳成疾
- [DP 分块] UOJ #300. 【CTSC2017】吉夫特
- [DP] UOJ #311. 【UNR #2】积劳成疾
- UOJ 265(状压dp)(NOIP2016)
- 【DP】UOJ#149 【NOIP2015】子串
- TCP、UDP和HTTP
- HDU 3613 Best Reward(求前后缀回文 拓展KMP or Manacher)
- 复习数据结构:排序(三)——选择排序
- Android的Gradle插件(1):用Gradle构建你的android程序
- Word Break II
- [UOJ 28][IOI 2014]Friend(DP)
- acm2012
- HTML,CSS,font-family:中文字体的英文名称
- hibernate报错:Use of @OneToMany or @ManyToMany targeting an unmapped class:
- 希尔排序的实现
- 第1章 使用字符串
- linux下常用命令
- iOS 16进制转UIColor
- C++初学者笔记:std::thread,子线程阻塞主线程的问题