没考虑可以连着两个不选……直接染色了

实际上是基环森林,对于每棵基环树,dfs找出一个环边,然后断掉这条边,分别对这条边的两端点做一边treedp,取max加进答案里

treedp是设f[u]为选u点,g[u]为不选u点,然后随便转移一下就行了

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1000005;
int n,h[N],cnt=1,x,y,eg;
long long a[N],f[N],g[N],ans;
bool v[N];
struct qwe
{
int ne,to;
}e[N<<1];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].to=v;
h[u]=cnt;
}
void dfs(int u,int fr)
{
v[u]=1;
for(int i=h[u];i;i=e[i].ne)
if((i^1)!=fr)
{
if(v[e[i].to])
x=u,y=e[i].to,eg=i;
else
dfs(e[i].to,i);
}
}
void dp(int u,int fr)
{
f[u]=a[u],g[u]=0;
for(int i=h[u];i;i=e[i].ne)
if((i^1)!=fr&&i!=eg&&(i^1)!=eg)
{
dp(e[i].to,i);
f[u]+=g[e[i].to];
g[u]+=max(f[e[i].to],g[e[i].to]);
}
}
int main()
{
n=read();
for(int i=1,u;i<=n;i++)
{
a[i]=read(),u=read();
add(i,u),add(u,i);
}
for(int i=1;i<=n;i++)
if(!v[i])
{
dfs(i,0);
dp(x,0);
long long nw=g[x];
dp(y,0);
ans+=max(nw,g[y]);
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. hdu3228Island Explorer
  2. CRM 2016 级联过滤
  3. 模型(modle)
  4. Linux上iptables防火墙的基本应用
  5. 用css做类似表格的布局
  6. ios 从微信返回自己的app
  7. 百度识图API
  8. SecureCRT 绝佳配色方案
  9. ASP.NET CORE系列【一】搭建ASP.NET CORE项目
  10. go语言框架gin之集成swagger
  11. so beautiful so white
  12. MySQL复制表-SELECT INTO FROM
  13. taro安装使用 Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (64)错误
  14. 基于vue-cli3.0构建功能完善的移动端架子,主要功能包括
  15. OCM_第十七天课程:Section7 &mdash;》GI 及 ASM 安装配置 _管理和配置 GRID /实施 ASM 故障组 /创建 ACFS 文件系统
  16. win10 java环境变量
  17. c#dataGridView 知识
  18. 【377】only one element in a tuple
  19. 剑指offer三十五之数组中的逆序对
  20. 原生JavaScript的DOM操作方法总结

热门文章

  1. centos 中找不到 php-config
  2. 转 gSOAP中使用TCP协议传输数据
  3. 分析PMT changed for the ROM:it must be downloaded.升级失败。
  4. 跟着9张思维导图学JavaScript
  5. 如何删除Windows 7的保留分区
  6. UI 07 _ 导航视图控制器 与 属性传值
  7. redux-saga 异步流
  8. linux系列之-—01 shell编程笔记
  9. mysql学习笔记之mysql数据库的安装
  10. iOS项目开发实战——plist数组解析