BZOJ 4027 兔子与樱花
原来想的是给所有点排序。。。。但是要修改啊。。。然后发现对于儿子排序就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 2000050
#define maxv 2000050
#define maxe 4000050
using namespace std;
int n,m,c[maxn],s[maxn],x,top=,ans=,g[maxv],nume=,fath[maxv],tot[maxv];
bool vis[maxn];
struct pnt
{
int id,rank;
}p[maxn];
struct edge
{
int v,nxt;
}e[maxe];
struct value
{
int val,id;
}ret[maxn];
queue <int> q;
int read()
{
char ch;int data=;
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='')
{
data=data*+ch-'';
ch=getchar();
}
return data;
}
bool cmp1(pnt x,pnt y) {return x.rank<y.rank;}
bool cmp2(value x,value y) {return x.val<y.val;}
void addedge(int u,int v)
{
e[++nume].v=v;
e[nume].nxt=g[u];
g[u]=nume;
}
void topusort()
{
p[].id=;p[].rank=;q.push();
while (!q.empty())
{
int head=q.front();q.pop();
for (int i=g[head];i;i=e[i].nxt)
{
int v=e[i].v;
p[v].id=v;p[v].rank=p[head].rank+;
q.push(v);
}
}
sort(p+,p+n+,cmp1);
}
int main()
{
n=read();m=read();
for (int i=;i<=n;i++) c[i]=read();
for (int i=;i<=n;i++)
{
s[i]=read();
for (int j=;j<=s[i];j++)
{
x=read();x++;
addedge(i,x);fath[x]=i;tot[i]+=c[x];
}
}
topusort();
for (int i=n;i>=;i--)
{
top=;int now=p[i].id;
for (int j=g[now];j;j=e[j].nxt)
{
int v=e[j].v;
ret[++top].val=c[v]+s[v]-;
ret[top].id=v;
}
sort(ret+,ret+top+,cmp2);
for (int j=;j<=top;j++)
{
if (c[now]+s[now]+ret[j].val<=m)
{
ans++;
tot[now]+=tot[ret[j].id];
c[now]+=c[ret[j].id];
s[now]+=s[ret[j].id]-;
}
}
}
printf("%d\n",ans);
return ;
}
BZOJ 4027 兔子与樱花的更多相关文章
- 【BZOJ】【4027】【HEOI2015】兔子与樱花
贪心 树上贪心问题……跟APIO2015练习赛的C很像啊…… 我的思路是:从叶子向上考虑,令a[x]表示x这个节点上樱花数量与儿子个数的和(即对于任意的x,都有$a[x]\leq m$)每次从儿子的a ...
- 【BZOJ 4027】 4027: [HEOI2015]兔子与樱花 (贪心)
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- BZOJ 4027: [HEOI2015]兔子与樱花 树上dp
4027: [HEOI2015]兔子与樱花 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- BZOJ 4027: [HEOI2015]兔子与樱花 贪心
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- BZOJ4027: [HEOI2015]兔子与樱花 贪心
觉得是贪心,但是一开始不太肯定...然后就A了 一个点对它的父亲的贡献就是自己的权值加儿子的个数 #include<bits/stdc++.h> using namespace std; ...
- 【BZOJ4027】兔子与樱花(贪心)
[BZOJ4027]兔子与樱花(贪心) 题面 BZOJ 洛谷 题解 很直观的一个感受就是对于每个节点, 考虑它的所有儿子,如果能删就删. 那么我们把所有儿子按照给删去后给父亲\(c[i]\)的贡献从小 ...
- [BZOJ4027]兔子与樱花
4027: [HEOI2015]兔子与樱花 Time Limit: 10 Sec Memory Limit: 256 MB Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突 ...
- [HEOI2015]兔子与樱花[贪心]
4027: [HEOI2015]兔子与樱花 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1043 Solved: 598[Submit][Stat ...
- [HEOI2015]兔子与樱花(贪心)
[HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由\(n\)个树枝分叉点组成,编号从\ ...
随机推荐
- [bootstrap] 基本css样式和组件
一.基本css样式 01.全局设置 全局 font-size 是 14px,line-height 是 20px. 这些样式应用到了 <body> 和所有的段落上. 另外,对 <p& ...
- \bin\sh.exe:*** Couldn't reserve space for cygwin's heap,Win32 error 0
Git一直使用都好好的,今天git pull的时候,报了如下的错误,\bin\sh.exe:*** Couldn't reserve space for cygwin's heap,Win32 err ...
- java之多线程(Thread)
package DEMO; //主线程 public class Example12_2 { public static void main(String [] args ) { Thread myd ...
- Android实现Activity页面跳转切换动画特效
了解Android程序设计的人应该知道,在Android 2.0之后有了overridePendingTransition(),其中里面两个参数,一个是前一个activity的退出,另一个activi ...
- 设置浏览器使用的dom模式为IE7
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>设置浏览器使用的dom模式为 ...
- synchronized和static synchronized的比较
群里讨论的一个问题,网上别人已经贴出了很详细的说明,这里补充记录下,后面加入个人测试代码. 起因:1月份的时候看群里讨论一道问题,问题内容如下: 一个日本作者-结成浩的<java多线程设计模式& ...
- PHP Mongodb 基本操作
<?php include "config/config.inc.php";$host = $config['host'];$port = $config['port']; ...
- 使用ContentProvider管理多媒体-----查看多媒体数据中的所有图片
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; impo ...
- treap 1296 营业额统计
有一个点答案错误,求大神指教 #include<cstdio>#include<iostream>#include<cstdlib>#include<ctim ...
- POJ 1011 Sticks dfs,剪枝 难度:2
http://poj.org/problem?id=1011 要把所给的集合分成几个集合,每个集合相加之和ans相等,且ans最小,因为这个和ans只在[1,64*50]内,所以可以用dfs一试 首先 ...