Codeforces#514E(贪心,并查集)
using namespace std;
long long w[100007],sum[100007];
int fa[100007],degree[100007],dp[100007],depth[100007];
int flag[100007];
int vis[100007];
{
int k, j, r;
r = x;
while(r != dp[r]) //查找根节点
r = dp[r]; //找到根节点,用r记录下
k = x;
while(k != r) //非递归路径压缩操作
{
j = dp[k]; //用j暂存parent[k]的父节点
dp[k] = r; //fa[x]指向根节点
k = j; //k移到父节点
}
return r; //返回根节点的值
}
int n,l;
long long s;
scanf("%d%d%lld",&n,&l,&s);
for(int i=1;i<=n;i++){
scanf("%lld",&w[i]);
if(w[i]>s)//这个权重超重
return puts("-1"),0;
}
for(int i=2;i<=n;i++){
scanf("%d",&fa[i]);
degree[fa[i]]++;//双亲结点度数+1
}
for(int i=1;i<=n;i++){
dp[i]=i;
depth[i]=depth[fa[i]]+1;//深度为双亲结点深度+1
sum[i]=sum[fa[i]]+w[i];//这一点的总权重为双亲结点总权重+自己权重
}
int h=0,cnt=0,ans=0;
for(int i=1;i<=n;i++){
if(!degree[i])//i为叶子节点
flag[cnt++]=i;//记录叶子节点位置
}
while(h<cnt){
int x=flag[h++];
if(vis[x])
continue;
ans++;
int num=0;
long long val=0;
while(x){
int next=find_x(x);//第一次是自己,之后是祖先(它被合并入它的双亲)
if(vis[next]==1)//当它变成祖先时,这个向上贪心的点已经被选中
break;//这句去掉一样能过,多跑15ms,感觉加上比较好
num+=depth[x]-depth[next]+1;//这一条路的节点数
val+=sum[x]-sum[next]+w[next];////这一条路的总权重
if(num>l||val>s)//超长或者超重就停止,无法继续贪心
break;
vis[next]=1;//这个节点已经被选中,所有的点都只能被选中一次
degree[fa[next]]--;//next的双亲结点度数减一
if(!degree[fa[next]])//如果nect的双亲结点成为叶子节点
flag[cnt++]=fa[next];//记录它的位置
dp[next]=find_x(fa[dp[next]]);//把这个点并到它父亲里
x=fa[next];//贪心它的父亲
}
}
printf("%d\n",ans);
return 0;
}
/*while(h<t)
{
int x=q[h++];
if(vis[x]) continue;
++Ans;
while(x)
{
int nxt=Find(x);
num+=depth[x]-depth[nxt]+1, s+=sum[x]-sum[nxt]+w[nxt];
if(num>L||s>S) break;
if(!--dgr[fa[nxt]]) q[t++]=fa[nxt];
F[nxt]=Find(fa[F[nxt]]), x=fa[nxt];
}
}
printf("%d\n",Ans);*/
Codeforces#514E(贪心,并查集)的更多相关文章
- Codeforces 437D 贪心+并查集
这个题目让我想起了上次在湘潭赛的那道跪死了的题.也是最值问题,这个也是,有n个动物园 每个都有权值 然后被m条路径相连接,保证图是连通的,然后求所有的p[i][j]之和.i,j为任意两个zoo,pij ...
- POJ 1456 Supermarket(贪心+并查集)
题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...
- Codeforces 437D The Child and Zoo(贪心+并查集)
题目链接:Codeforces 437D The Child and Zoo 题目大意:小孩子去參观动物园,动物园分非常多个区,每一个区有若干种动物,拥有的动物种数作为该区的权值.然后有m条路,每条路 ...
- codeforces 651E E. Table Compression(贪心+并查集)
题目链接: E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- Codeforces 731C Socks 并查集
题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...
- codeforces 722C (并查集)
题目链接:http://codeforces.com/contest/722/problem/C 题意:每次破坏一个数,求每次操作后的最大连续子串和. 思路:并查集逆向操作 #include<b ...
- poj1456(贪心+并查集)
题目链接: http://poj.org/problem?id=1456 题意: 有n个商品, 已知每个商品的价格和销售截止日期, 每销售一件商品需要花费一天, 即一天只能销售一件商品, 问最多能买多 ...
- POJ - 1456 贪心+并查集
做法一:直接贪心,按照利润排序,然后直接尽量给每个活动安排到最晚的时间即可.时间复杂度O(n * d)当d都为10000时,很容易超时.由于这题数据比较水,所有贪心未超时. AC代码 #include ...
- poj1456 Supermarket 贪心+并查集
题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...
随机推荐
- ajax页面中的前进与后台的实现
具体效果参考:http://www.zhangxinxu.com/study/201306/ajax-page-html5-history-api.html? //以下是自己的部分理解<!DOC ...
- Linux课程---1、VMWare安装CentOS虚拟机(安装重要注意)
Linux课程---1.VMWare安装CentOS虚拟机(安装重要注意) 一.总结 一句话总结: 可以先去百度搜一篇对应系统的安装教程:比如 CentOS 7 安装 1.安装VMWare之后,打开w ...
- codeforces 459D D. Pashmak and Parmida's problem(离散化+线段树或树状数组求逆序对)
题目链接: D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per test 256 megab ...
- dbcc练习1
dbcc tranceon(2588,3604) dbcc ind() dbcc page()
- iOS奇怪的问题,键盘偏移异常
现象描述: 点击UITextView,键盘会弹出.然后点击添加图片,弹出了ActionSheet,键盘自动收缩.接着关闭ActionSheet,发现键盘又弹出了,接着点击Done,想要隐藏键盘,却发现 ...
- fastjson 使用笔记
1.string转json String params={'key1':'50001','key2':10007700'}Map<String, String> a = JSON.pars ...
- virtual judge(专题一 简单搜索 B)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- netty中的ByteBuf
网络数据的基本单位总是字节.Java NIO 提供了 ByteBuffer 作为它 的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐. Netty 的 ByteBuffer 替代品是 ByteB ...
- EventLoop 与 Channel 的关联
Netty 中, 每个 Channel 都有且仅有一个 EventLoop 与之关联, 它们的关联过程如下: 从上图中我们可以看到, 当调用了 AbstractChannel#AbstractUnsa ...
- 测试-Swagger:目录
ylbtech-测试-Swagger:目录 1.返回顶部 1. https://swagger.io/ 2.Swagger Editor http://swagger.io/swagger-edito ...