博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1040: [ZJOI2008]骑士
阅读量:5142 次
发布时间:2019-06-13

本文共 1269 字,大约阅读时间需要 4 分钟。

本来今天想学基环树的

认真看一看,这不就是弱化的仙人掌嘛

然后,就直接仙人掌上DP咯(蒟蒻不是很会调了一晚上。。。)

#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;struct node{ int x,y,next;}a[2100000];int len,last[1100000];void ins(int x,int y){ len++; a[len].x=x;a[len].y=y; a[len].next=last[x];last[x]=len;}LL ft[1100000],f[2][1100000];int z,dfn[1100000],fa[1100000];bool v[1100000];//是否在仙人掌中void DP(int rt,int x)//只需要更新rt { LL g[2][2]; int pre=0,now=1; g[now][0]=g[now][1]=0; for(int i=x;i!=rt;i=fa[i]) { swap(pre,now); g[now][0]=max(g[pre][0],g[pre][1])+f[0][i]; g[now][1]=g[pre][0]+f[1][i]; } f[0][rt]+=max(g[now][0],g[now][1]); //不取rt pre=0,now=1; g[now][0]=g[now][1]=0; for(int i=x;i!=rt;i=fa[i]) { swap(pre,now); g[now][0]=max(g[pre][0],g[pre][1])+f[0][i]; if(i==x||fa[i]==rt)g[now][1]=0; else g[now][1]=g[pre][0]+f[1][i]; } f[1][rt]+=max(g[now][0],g[now][1]); //取rt }int h[1100000];void cactus(int x){ dfn[x]=++z; f[0][x]=0;f[1][x]=ft[x]; for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(dfn[y]==0) fa[y]=x, cactus(y); } for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(fa[x]!=y) { if(dfn[y]

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/8886249.html

你可能感兴趣的文章
JQUERY 大于
查看>>
ZooKeeper做独立server执行(上)
查看>>
《经济地理与企业兴衰》学习笔记
查看>>
正确 C# 未来的期望
查看>>
【UVA】434-Matty's Blocks
查看>>
五、宽度优先搜索(BFS)
查看>>
运行一个窗体直接最大化并把窗体右上角的最大化最小化置灰
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
WebForm——IIS服务器、开发方式和简单基础
查看>>
小实验3:实现haproxy的增、删、查
查看>>
Angular中ngModel的$render的详解
查看>>
读《格局》| 未到年纪的真理
查看>>
[转]《城南旧事》里的《送别》
查看>>
07动手动脑
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
Eclipse插件安装4种方法
查看>>
MySQL忘记密码怎么办?
查看>>
define 和 const常量有什么区别?
查看>>