博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2427: [HAOI2010]软件安装 tarjan+树形背包
阅读量:6831 次
发布时间:2019-06-26

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

分析:

一开始我以为是裸的树形背包...之后被告知这东西...可能有环...什么!有环!

有环就搞掉就就可以了...tarjan缩点...建图记得建立从i到d[i]之后跑tarjan,因为这样才能判断出环的情况...

缩点之后重新建图就需要见d[i]到i了...

附上代码:

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define N 205struct node{ int to,next;}e[N];int f[N][505],head[N],cnt,dfn[N],low[N],vis[N],sta[N],top,tims,fa[N],n,m,a[N],b[N],in1[N];void add(int x,int y){if(!y)return;e[cnt]=(node){y,head[x]};head[x]=cnt++;}void tarjan(int x){ dfn[x]=low[x]=++tims;sta[++top]=x;vis[x]=1; for(int i=head[x];i!=-1;i=e[i].next) { int to1=e[i].to; if(vis[to1])low[x]=min(dfn[to1],low[x]); else if(!dfn[to1])tarjan(to1),low[x]=min(low[x],low[to1]); } if(dfn[x]==low[x]) { while(sta[top]!=x) { fa[sta[top]]=x; vis[sta[top]]=0; top--; } fa[x]=x;vis[x]=0;top--; }}vector
v[N];void dfs(int x){ for(int i=0;i
=b[x];i--)f[x][i]=f[x][i-b[x]]+a[x]; for(int i=0;i

  

转载于:https://www.cnblogs.com/Winniechen/p/9241922.html

你可能感兴趣的文章
改变世界前,先改变自己
查看>>
《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」...
查看>>
Java_异常_01_org.apache.commons.lang.exception.NestableRuntimeException
查看>>
1-AIV--使用ContentProvider获取短信
查看>>
前端优化系列 - 前端优化的思考
查看>>
火爆GitHub:100天搞定机器学习编程(超赞信息图+代码+数据集)
查看>>
TongDXP
查看>>
Python进阶-算法-插入排序
查看>>
C# 如何添加水印到PPT
查看>>
北京朝阳区第二批重点产业发展引导资金项目即将开始征集
查看>>
微信小程序开发系列五:微信小程序中如何响应用户输入事件
查看>>
My favorite examples of functional programming in Kotlin
查看>>
架构文摘:消息队列设计精要
查看>>
2018最全的iOS面试题及答案
查看>>
问题账户需求分析
查看>>
创新平台年报统计系统——利益相关者描述案例
查看>>
匹配特定数字串
查看>>
我的垂直居中
查看>>
数值分析Matlab绘制三维数据曲面图
查看>>
将Angular6自己定义的模块发布成npm包
查看>>