见题:

看一眼,就知道是个依赖性背包,于是乎就草草的打了树上DP,一交发现才20,仔细检查也没错呀,忍不住点了题解,只喵一眼看到了强联通缩点等的字样,又重新审了一遍题,发现这句话理解有偏差:软件i只有在安装了软件j(包括软件j的直接或间接依赖)。题目并未说i依赖j时,j就不能依赖i了,所以就形成了环了。

代码:

#include<bits/stdc++.h>
#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
using namespace std;
const int MAXN=,maxn=;
vector<int>son[maxn];
int tot,low[maxn],dfn[maxn],link[maxn],stackn[maxn],vis[maxn],top,o;
int n,w[maxn],v[maxn],m,c,ans[maxn],ww[maxn],vv[maxn],ru[maxn],f[maxn][MAXN];
struct bian
{
int y,next;
};
bian a[];
inline int read()
{
int x=,ff=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') ff=-;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*ff;
}
inline void put(int x)
{
if(x<) putchar('-'),x=-x;
if(x>) put(x/);
putchar(x%+'');
}
inline void add(int x,int y)
{
a[++tot].y=y;
a[tot].next=link[x];
link[x]=tot;
}
inline void tarjan(int x)
{
dfn[x]=low[x]= ++o;
vis[stackn[++top]=x]=;
for(int i=link[x];i;i=a[i].next)
{
int y=a[i].y;
if(!dfn[y])
{
tarjan(y);
low[x]=min(low[x],low[y]);
}
else if(vis[y]) low[x]=min(dfn[y],low[x]);
}
if(dfn[x]==low[x])
{
int k;c++;
do{
vis[k=stackn[top--]]=;
ans[k]=c;
}while(k!=x);
}
}
inline void dfs(int x)
{
for(int i=ww[x];i<=m;i++)f[x][i]=vv[x];
for(int i=;i<son[x].size();i++)
{
int y=son[x][i];
dfs(y);
for(int t=m;t>=ww[x];t--)
{
for(int k=;k<=t-ww[x];k++) f[x][t]=max(f[x][t],f[x][t-k]+f[y][k]);
}
}
}
int main()
{
freopen("1.in","r",stdin);
n=read();m=read();
for(int i=;i<=n;i++) w[i]=read();
for(int i=;i<=n;i++) v[i]=read();
for(int i=;i<=n;i++)
{
int x=read();
if(x) add(x,i);
}
for(int i=;i<=n;i++) if(!dfn[i]) tarjan(i);
for(int i=;i<=n;i++) ww[ans[i]]+=w[i],vv[ans[i]]+=v[i];
for(int i=;i<=n;i++)
{
for(int j=link[i];j;j=a[j].next)
{
if(ans[i]==ans[a[j].y]) continue;
son[ans[i]].push_back(ans[a[j].y]);ru[ans[a[j].y]]++;
}
}
for(int i=;i<=c;i++) if(!ru[i]) son[].push_back(i);
dfs();
put(f[][m]);
return ;
}

以后看题还需仔细了...

图论.DP的更多相关文章

  1. 图论+dp poj 1112 Team Them Up!

    题目链接: http://poj.org/problem?id=1112 题目大意: 有编号为1~n的n个人,给出每个人认识的人的编号,注意A认识B,B不一定认识A,让你将所有的人分成两组,要求每组的 ...

  2. 洛谷P3953 逛公园 [noip2017] 图论+dp

    正解:图论(最短路)+dp(记忆化搜索) 解题报告: 这题真的是个好东西! 做了这题我才发现我的dij一直是错的...但是我以前用dij做的题居然都A了?什么玄学事件啊...我哭了TT 不过其实感觉还 ...

  3. Mr. Rito Post Office [Aizu-2200] [图论] [DP]

    题意:你是某个岛国(ACM-ICPC Japan )上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛上 ...

  4. [CSP-S模拟测试]:城市游戏(图论+DP)

    题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...

  5. Codeforces 1299D - Around the World(线性基+图论+dp)

    Codeforces 题目传送门 & 洛谷题目传送门 一道线性基的综合题 %%%%%% 首先注意到"非简单路径""异或和"等字眼,可以本能地想到线性基. ...

  6. Codeforces Round #599 (Div. 1) C. Sum Balance 图论 dp

    C. Sum Balance Ujan has a lot of numbers in his boxes. He likes order and balance, so he decided to ...

  7. hdoj 5092 Seam Carving 【树塔DP变形 + 路径输出】 【简单题】

    Seam Carving Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  8. 2014NOIP前 计划

    这几天天天刷水题活得很开心,是时候定一个计划了.想着我要在yzy左的吓人的歌声中看书,还是有点.... 大概就分成几类吧 数学//你们这群学霸啊 搜索 图论 dp 贪心 其他 每个不定具体时间,加油吧 ...

  9. The Last Week

    二轮省选前的最后一周了呢. 一路走到这里,真的很希望能继续走下去. 好好调整一下状态,争取能有机会买D吧(虽然现在似乎D也没什么用了 day1 多项式 多项式ln 多项式exp day2 数据结构 L ...

随机推荐

  1. TZipFile FileNames中文乱码解决办法

    TEncoding.Default.GetString(zip.FileInfo[0].FileName); 补充说明: Zip.Extract(Zip.FileName[0], 'd:\'); 解压 ...

  2. 2、冒泡排序法(C语言)

    一.冒泡算法实现分析 1.假设有5个元素分别为8,6,15,9,3对其进行冒泡排序,我们需要关注的有三点如下: (1)元素个数 n: (2)需要比较的趟数 i: (3)每趟比较的次数 j: 2.它们之 ...

  3. 在CentOS 7上安装Nginx

    本教程中的步骤要求用户拥有root权限 第一步 - 添加Nginx存储库要添加CentOS 7 EPEL仓库,请打开终端并使用以下命令: sudo yum install epel-release第二 ...

  4. MySQL运行内存不足时应采取的措施?

    排除故障指南:MySQL运行内存不足时应采取的措施? 天一阁@ 老叶茶馆 1周前 导读 排除故障指南:MySQL运行内存不足时应采取的措施? 翻译团队:知数堂藏经阁项目 - 天一阁 团队成员:天一阁- ...

  5. Win10安装Ubuntu子系统教程(附安装图形化界面)

    一.启用“适用于Linux的Windows子系统” 通过Win10任务栏中的Cortana搜索框搜索打开“启用或关闭Windows功能”,向下滚动列表,即可看到“适用于Linux的Windows子系统 ...

  6. Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]报错解决方法

    错误: 解决方法:

  7. 多线程、互斥锁、异步、GIL

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便被使用 from threading imp ...

  8. InfluxDB安装和简介

    InfluxDB是一个当下比较流行的时序数据库,InfluxDB使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统. 一.InfluxDB 简介 InfluxDB ...

  9. win10更新后出现System.ComponentModel.Win32Exception

    win10更新后出现System.ComponentModel.Win32Exception 我的环境是由于“sql server2012 无法连接到WMI提供程序”引起的 参考http://www. ...

  10. Ping 笔记

    Ping  笔记 查看网络间的连通性. 当设备与PC在同一局域网中(连接同一路由器),设备与PC互Ping对方,若只有其中一个掉线连不上,两者可能存在网络端口的问题, 若设备与PC同时掉线,则为路由器 ...