P2607 [ZJOI2008]骑士

题意:

n个点n个边,每个点都有权值,相邻的点不能同时选择,问如何选择能使得权值最大

题解:

这个题很有P1352 没有上司的舞会这个题的感觉,唯一的区别是那个题保证是树,而本题肯定不是树,而是基环树
也就是本题中,每一个连通块有且只有一个环,所以我们找到这个环并剪短,这样就形成一颗树,断口的两个端点x和y,我们认为分开
对于一棵树,这不就是P1352 没有上司的舞会这个题吗

注意有可能存在很多连通块,记得所有连通块的答案要累加

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#define maxn 1000010
using namespace std;
int fun[maxn],a,b;
long long dp[maxn][2];
struct node
{int next,to,v;
}e[2000010];
int head[1000010],vis[maxn],n,s,tot,x1,x2,E;
void add(int x,int y)
{e[tot].to=y;e[tot].next=head[x];head[x]=tot++;
}
void find_circle(int x,int pre)
{vis[x]=1;for (int i=head[x];~i;i=e[i].next){if ((i^1)==pre) continue;if (vis[e[i].to]){x1=x;//断口的左侧 x2=e[i].to;//断口另一侧 E=i;//断开的边 continue;}find_circle(e[i].to,i);}
}
void dfs(int x,int pre)
{dp[x][0]=0;dp[x][1]=fun[x];for (int i=head[x];~i;i=e[i].next){if ((i^1)==pre) continue;if (i==E || (i^1)==E)continue;dfs(e[i].to,i);dp[x][1]+=dp[e[i].to][0];dp[x][0]+=max(dp[e[i].to][1],dp[e[i].to][0]);}
}
int main()
{memset(head,-1,sizeof head);scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%d",&a,&b);add(i,b);add(b,i);fun[i]=a;}long long ans=0;for (int i=1;i<=n;i++){if (vis[i]) continue;find_circle(i,-2);dfs(x1,-1);long long temp=dp[x1][0];dfs(x2,-1);temp=max(temp,dp[x2][0]);ans+=temp; }printf("%lld",ans);
}

P2607 [ZJOI2008]骑士相关推荐

  1. bzoj 1040: [ZJOI2008]骑士 树形dp

    题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3054  Solved: 1162 [Submit] ...

  2. 基环树DP(bzoj 1040: [ZJOI2008]骑士)

    树:n个点n-1条边的连通图 基环树:n个点n条边的连通图,也就是一个环套着多棵树 基环树DP:找到环上任意相邻两点,断掉这两点之间的边,就形成了一棵树 之后对这两点分别进行一次树形DP即可 例题: ...

  3. bzoj 1040 1040: [ZJOI2008]骑士

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5210  Solved: 1987 [Submit][Stat ...

  4. BZOJ1040: [ZJOI2008]骑士

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5332  Solved: 2023 [Submit][Stat ...

  5. 1584 ZJOI2008 骑士

    首先声明:下面是关于这道题的某位大佬博主的解答代码作解释,代码出处为1584 ZJOI2008 骑士(Bzoj1040 LOJ10162 LUOGU2607 省选/NOI-) 枚举组合数30分 类01 ...

  6. bzoj 1040: [ZJOI2008]骑士

    第一次做环套树的题 这道题题目中貌似是有向边,实际上想一想就知道是无向的. 因为一个骑士觉得另一个骑士丑他们俩就走不到一起. 所以整个图实际上是一个无向环套树森林. 对于每一棵环套树,先dfs找环,找 ...

  7. 1040: [ZJOI2008]骑士

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7113  Solved: 2797 [Submit][Status][Discuss] Descri ...

  8. LOI 2607 [ZJOI2008]骑士

    ##题目描述## Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延 ...

  9. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

最新文章

  1. 解决 python用 xlsxwrite 向excel 中写入中文字符串变量 报错
  2. React Native布局详细指南
  3. KVM Vhost-net 和 Virtio-net代码详解(十八)
  4. vs2003打开项目错误
  5. 汇编语言(七)之字符串转大写
  6. iPhone 14进入代工试产阶段:首款打孔屏iPhone要来了
  7. 使用决策树分类算法判断一下你的Python水平
  8. ae 创建图像等高线 蒙版_UI设计教程:几步教你如何创建一个漂亮又好吃的饼干...
  9. python输入函数设计_(董付国)Python 学习笔记---Python函数设计与使用(3)
  10. 数电2_2——逻辑函数的变换与化简
  11. C#实现最简单的文本加密方法
  12. 2021会员运营痛点分析
  13. Android OTG 读写U盘文件
  14. Teambition是什么软件?优缺点是什么?
  15. 计算机教室规则英语,有没有关于教室规则 的英文
  16. Intel核显--OpenCL环境--Linux
  17. java 绘制图形实验心得体会_绘图实习心得体会3篇
  18. css+html创建一个大风车
  19. 无聊猿宇宙之风进军国内市场会卷起巨浪吗?
  20. 怎样把电脑上的歌曲格式转换成MP3格式

热门文章

  1. 年轻人不能“饥渴”太久,否则……
  2. 揭秘神仙高校的课堂!网友跪了:这就是差距啊!
  3. 北方人的快乐。。。| 今日最佳
  4. 来自女朋友的灵魂拷问!| 今日最佳
  5. 与殿堂级大师隔空对话——一张纸是怎么限制了我们的想象力
  6. android canvas_Android 如何实现气泡选择动画
  7. oracle 参照完整性,Oracle中用表外键来保证系统参照完整性
  8. php 读取onedrive文件夹,oneindex
  9. python能做哪些客户端_Python 实现简单的客户端认证
  10. 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)