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\)个树枝分叉点组成,编号从\ ...
随机推荐
- 函数内部的函数中的this都是指向window
刚看到一个问题关于this的, var name="the window"; var object={ name:"silence", packname:fun ...
- [Spring] spring-session + JedisPool 实现 session 共享
1.至少导入四个jar包: jedis spring-session spring-data-redis commons-pool2 2.bean配置 <?xml version="1 ...
- GIT命令(急速学习)
用过sourceTree,egit(eclipse中的git插件),最后还是感觉git bash顺手:svn早已经不用: 先上几个原来看过的git 教程--书读百遍,其义自见.多看几篇文章才能总结 ...
- DES加密算法
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开 ...
- PHP + Memcache 实现多服务器session共享
很多时候一个完整的系统可能运行在多个服务器上,如果这多个服务器之间需要共享session的话,那么php默认的files保存session的方式就无能为力了.这时我们可以考虑使用memcache 来接 ...
- servlet 配置
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.web.s ...
- orcl
Class.forName("orcle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnecti ...
- BZOJ1718 [Usaco2006 Jan] Redundant Paths 分离的路径
给你一个无向图,问至少加几条边可以使整个图变成一个双联通分量 简单图论练习= = 先缩点,ans = (度数为1的点的个数) / 2 这不是很好想的么QAQ 然后注意位运算的优先级啊魂淡!!!你个sb ...
- placeholder修改颜色
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #f00; } ::-moz-placeholder { /* Mozilla Fir ...
- display:inline-block;如何取消标签之间的距离
<div style="font-size:0px"> <div style=" display:inline-block; zoom:1;*displ ...