bzoj1825: [JSOI2010]蔬菜庆典
Description
Input
Output
首先如果一个非根的点有多个权值不同的孩子,显然答案为+inf,否则为了便于讨论将原树进行一些转换(代码实现中只是隐式处理):
根的权值不会改变,根的子树间互不影响。可以删去根(并计入答案),对每个原先父亲为根的点,新建一个点作为其父亲,权值与根相同(新建的点不计入答案)
叶子的权值不会改变。如果一个点的所有孩子都是叶子,只保留一个孩子(被删去的叶子直接计入答案)
由此得到一个有根森林。对每个连通块,如果每个点至多有一个孩子,构成一条链,那么在链上操作相当于交换相邻两条边的边权(边权定义为两端点权之差),无论如何都无法达到inf,可以贪心将边权排序得到最大值。否则,存在至少一个点有2个或更多孩子,这时当且仅当所有边权相同时答案不是inf(此时操作无效)(若有不同的边权,可通过操作传递至有两个孩子的点上,导致答案为inf(严格的说,不在链上时,操作除了交换两边边权还可能影响其他边权,但并不影响上述结论成立))
#include<cstdio>
#include<algorithm>
int _(){
int x;
scanf("%d",&x);
return x;
}
typedef long long i64;
const int N=,v0=0x3f3f3f3f;
int n;
int fa[N],son[N],v[N],sv[N],deg[N],cl[N];
int ss[N],sp;
bool nl[N];
i64 ans;
#define ass(x) if(x)n/=0
int main(){
//freopen("in.txt","r",stdin);
while(n=_()){
_();
ans=v[]=_();
bool _inf=;
for(int i=;i<=n;++i){
sv[i]=v0;deg[i]=cl[i]=son[i]=;
int f=fa[i]=_();
ass(f>i);
v[i]=_();
if(f==)continue;
++deg[f];
son[f]=i;
if(sv[f]==v0)sv[f]=v[i]-v[fa[i]];
else if(sv[f]!=v[i]-v[fa[i]])_inf=;
}
if(_inf)goto o;
for(int i=;i<=n;++i)if(!deg[i])ans+=v[i],++cl[fa[i]];
//for(int i=2;i<=n;++i)printf("%d:%d %d\n",i,deg[i],cl[i]);
for(int i=;i<=n;++i)nl[i]=nl[fa[i]]||deg[i]-cl[i]-!cl[i]>;
for(int i=n;i>=;--i)nl[fa[i]]|=nl[i];
nl[]=;
for(int i=;i<=n;++i)if(deg[i]){
if(nl[i]){
ans+=v[i];
if(sv[i]!=v[i]-v[fa[i]])goto o;
}else if(fa[i]==){
sp=;
for(int w=i;w;w=son[w])ss[sp++]=v[w]-v[fa[w]];
std::sort(ss,ss+sp);
for(i64 x=v[];sp>;ans+=x+=ss[--sp]);
}
}
printf("%lld\n",ans);
continue;
o:{
puts("+inf");
continue;
}
}
return ;
}
bzoj1825: [JSOI2010]蔬菜庆典的更多相关文章
- bzoj 1825: [JSOI2010]蔬菜庆典
1825: [JSOI2010]蔬菜庆典 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 112 Solved: 45[Submit][Status][ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 【JSOI2010】Group 部落划分 BZOJ 1821
1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec Memory Limit: 64 MB 聪聪研究发现,荒岛野人总是过着群居的生活,但是 ...
- Bzoj1823 [JSOI2010]满汉全席
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1640 Solved: 798 Description 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的 ...
- 【BZOJ】1821: [JSOI2010]Group 部落划分 Group(最小生成树+贪心)
http://www.lydsy.com:808/JudgeOnline/problem.php?id=1821 这题裸题. 本题要求最短距离最长,很明显,我们排序. 这里存在贪心,即我们把边权最小的 ...
- 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流
1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 585 Solved: 175[Subm ...
- BZOJ 2208: [Jsoi2010]连通数 tarjan bitset
2208: [Jsoi2010]连通数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- bzoj2208:[Jsoi2010]连通数
http://blog.csdn.net/u013598409/article/details/47037499 里面似乎有生成数据的... //我本来的想法是tarjan缩点之后然后将图遍历一遍就可 ...
- BZOJ_1821_[JSOI2010]_部落划分_(贪心,并查集)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1821 给出n个点的坐标,将n个点划分成k个部分,使得每个部分之间最小的距离最大. 分析 每两个 ...
随机推荐
- 使用简单的python语句编写爬虫 定时拿取信息并存入txt
# -*- coding: utf-8 -*- #解决编码问题import urllibimport urllib2import reimport osimport time page = 1url ...
- MySQL 存储过程中执行DDL
一.定期增加表分区 1.增加表分区例 CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `p_create_Partition`(IN databaseName ...
- java中的块
之前没听过这个概念 块是java类中不太常见的一个元素.声明方式与方法体类似,分为static块和实例块两种. 实例块: {块体} 实例块不能直接调用,每一次调用构造方法创建对象的时候,都会在调用构造 ...
- android机顶盒真机调试方法
最近接触电视APP开发,之前对Android开发也不太了解还一直以为不能真机调试.最近静下心来想一想肯定能真机调试的,我是我不知道而已.现在讲述一下真机调试的步骤: 1.进入设置--关于,连续点击版本 ...
- IOS延时加载网络图片
重网上下载图片是很慢的,为了不影响体验,选择延时加载图片是很好的办法. 一个tableView 列表,左边暂时没有图 - (UITableViewCell *)tableView:(UITab ...
- net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法
解决问题方法如下: 在dos下运行net start mysql 不能启动mysql!提示发生系统错误 5:拒绝访问!切换到管理员模式就可以启动了.所以我们要以管理员身份来运行cmd程序来启动mys ...
- Linux 内核链表实现和使用(一阴一阳,太极生两仪~)
0. 概述 学习使用一下 linux 内核链表,在实际开发中我们可以高效的使用该链表帮我们做点事, 链表是Linux 内核中常用的最普通的内建数据结构,链表是一种存放和操作可变数据元 素(常称为节点) ...
- asp.net mvc json数据缓存
一些虚拟主机资源给的少, 如果直接用框架缓存, 估计内存就爆了吧, 如果不用缓存, 虚拟主机自带的数据库也是限制资源的, 访问多了就直接给timeout了, 用json文件形式缓存查询出来的数据, 虽 ...
- HihoCoder - 1501:风格不统一如何写程序
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi写程序时习惯用蛇形命名法(snake case)为变量起名字,即用下划线将单词连接起来,例如:file_name. ...
- UT源码_105032014033
需求描述: 设计佣金问题的程序 commission方法是用来计算销售佣金的需求,手机配件的销售商,手机配件有耳机(headphone).手机壳(Mobile phone shell).手机贴膜(Ce ...