B - 小Y上学记——小Y的玩偶
B - 小Y上学记——小Y的玩偶
Problem Description
小Y最喜欢拆拆拆了~尽管他不一定能装回去。
小Y有一个很可爱的积木玩偶,是由一块一块积木拼接而成,现在小Y想把这个积木玩偶拆拆拆。
每一块积木玩偶都有一个耐久值,想把一块积木拆出来,小Y需要付出的能量就是和它直接拼接的所有积木的耐久值之和。
小Y很懒的~他想知道把这个玩偶全部拆好,最少需要付出多少能量?
Input
多组数据,每组数据首先是一个整数n表示积木块数。(0<n<=1000)
接下来一行包含n个整数,表示每块积木的耐久值a[i](0<=a[i]<=100000)。
接下来是n行,第i行代表第i块积木的连接情况。
每一行首先是一个整数k,表示这块积木与k块积木相连,接下来是k个整数,代表与这块积木相连的积木标号(标号从0开始)
保证连接情况合法。
Output
Sample Input
4
10 20 30 40
2 1 3
2 0 2
1 1
1 0
4
100 100 100 100
1 1
3 0 2 3
2 1 3
2 1 2
7
40 10 20 10 20 80 40
4 2 3 4 5
1 4
2 0 3
5 0 2 4 5 6
4 0 1 3 6
2 0 3
2 3 4
Sample Output
40
400
160
Hint
对于第一组数据,首先拆掉第2块积木,需要20能量,然后拆掉第1块积木,需要10能量,接着拆掉第3块积木,需要10能量,最后只剩下第0块了,不需要能量了。总共需要40点能量。
对于第二组数据,无论怎么拆除,都是需要400点能量。
解法:贪心+邻接表(矩阵也可以)
每次拿走耐久度最大的点,更新图,在重复拿走,直到都成为独立的点即可。
为何要拿走耐久度最大的点,假如这个点的耐久度为K,有m条边,每一条边的所连接的点的耐久度为Ki,如果不拿走这个点的话,需要拆了可连接他的m条边的点,则是需要消耗K*m能量,如果直接把这个点拆除了,则只是需要K1+K2+...+Km能量。
因为,K*m>=K1+K2+...+Km,,细分下来,可以知道,每次拆除耐久度最大的点可以保证消耗的能量最小。再去更新连接图即可。
代码:2015.7.31
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX 100010
using namespace std;
int First[MAX];
int SIGN;
struct edge{int TO,Next,Vlaue;}ID[*MAX];
struct Node{int ID,V;}Poi[MAX];
int cmp(Node a,Node b){return a.V>b.V;};
void Add_E(int x,int y,int z)
{
ID[SIGN].TO=y;
ID[SIGN].Vlaue=z;
ID[SIGN].Next=First[x];
First[x]=SIGN++;
}
void Add_E(int x,int y)
{
ID[SIGN].TO=y;
ID[SIGN].Next=First[x];
First[x]=SIGN++;
}
void Dele_x_y(int x,int y)/*删除x-y的边*/
{
int i,j;/*起始点要注意*/
for(i=j=First[x];i!=;j=i,i=ID[i].Next)
{
if(ID[i].TO==y)/*如果能够找到该边*/
{
if(i==j)First[x]=ID[i].Next;
ID[j].Next=ID[i].Next;
break;
}
}
return ;
}
int GET_Sum(int x)/*查找与X相连的顶点*/
{
int i,Sum=;
for(i=First[x];i!=;i=ID[i].Next) //查找与该点相关的点
{
Sum+=ID[i].Vlaue;
Dele_x_y(ID[i].TO,x);
}
return Sum;
} int main()
{
int N,M,K,i,j,k;
int x,y,z,Sum;
int NUM[MAX];
while(scanf("%d",&N)!=EOF)
{
SIGN=;
for(i=;i<=N;i++)
{
scanf("%d",&NUM[i]);
Poi[i].ID=i;
Poi[i].V=NUM[i];
First[i]=;
}
sort(Poi+,Poi+N+,cmp);
for(i=;i<=N;i++)
{
scanf("%d",&K);
while(K--)
{
scanf("%d",&M);M+=;
Add_E(i,M,NUM[M]);
}
}
Sum=;
for(i=;i<=N;i++)
{
Sum+=GET_Sum(Poi[i].ID);
}
printf("%d\n",Sum);
}
return ;
}
B - 小Y上学记——小Y的玩偶的更多相关文章
- D - 小Y上学记——要迟到了!
D - 小Y上学记——要迟到了! Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- C - 小Y上学记——认识新同学
C - 小Y上学记——认识新同学 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- A - 小Y上学记——修学分
A - 小Y上学记——修学分 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...
- 【小知识】比较 x^y 和 y^x 的大小
往前翻几个编号相邻的题目翻到了这么一道题,感觉很好奇就做了一下 (upd:我下午问了下出题人做法,他就把题隐藏了……这不太友好啊……所以我补一下题意:) 题意 给你两个整数 $x$ 和 $y$,求 $ ...
- [再寄小读者之数学篇](2014-11-19 $\sin(x+y)=\sin x\cos y+\cos x\sin y$)
$$\bex \sin(x+y)=\sin x\cos y+\cos x\sin y. \eex$$ Ref. [Proof Without Words: Sine Sum Identity, The ...
- CCF CSP 201812-1 小明上学
题目链接:http://118.190.20.162/view.page?gpid=T80 问题描述 试题编号: 201812-1 试题名称: 小明上学 时间限制: 1.0s 内存限制: 512.0M ...
- 201812-1 小明上学 Java
思路: 上学这个题和放学有区别,上学是小明每到一个路口的情况,是实时更新的.不是只有出发时间,那样就比较复杂了. 这个题需要注意:黄灯之后要等红灯,想一下交通规则. import java.util. ...
- CCF201812-1小明上学
题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校.为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间.他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿 ...
- 小圣求职记A:腾讯篇
本人普通985高校计算机专业研究生一枚,从9月12号开始正式找工作,一个月过去了,参加了能参加的各个互联网公司的宣讲.笔试.面试,现用两篇随笔分享所见所闻.随笔A将以腾讯为例详细展示整个过程,随笔B将 ...
随机推荐
- HDU 5868 Different Circle Permutation
公式,矩阵快速幂,欧拉函数,乘法逆元. $an{s_n} = \frac{1}{n}\sum\limits_{d|n} {\left[ {phi(\frac{n}{d})×\left( {fib(d ...
- Ubuntu下安装python相关数据处理
01. Ubuntu下安装ipython sudo apt-get install ipython 02. Ubuntu下安装pip $ sudo apt-get install python-pip ...
- Spring Security(14)——权限鉴定基础
目录 1.1 Spring Security的AOP Advice思想 1.2 AbstractSecurityInterceptor 1.2.1 ConfigAttribute ...
- 利用before、after制作提示框
提示框由两部分组成,框+箭头,箭头则利用伪元素before.after写成. 根据提示框的样式可以看出,上面的箭头由两部分组成:灰色大箭头+蓝色小箭头,蓝色嵌套在灰色里面,于是箭头就有了边框,整体搭配 ...
- 大数据揭示的10个常见JAVA编程错误
初学者最常犯的编程错误是什么呢?有可能他们总是混淆等值(==)与赋值(=),或者 & 和 &&:也有可能是他们在循环中使用错误的分隔符(for (int i = 0, i &l ...
- OGC 的WCS WFS 及WMS 服务
OGC--Open Geospatial Consortium--开放地理信息联盟,是一个非盈利的志愿的国际标准化组织,引领着空间地理信息标准及定位基本服务的发展目前在空间数据互操作领域,基于公共接口 ...
- 微信小程序文档解读(一)--api提供支持有哪些
本文重点在于小程序API提供的微信功能支持及获取用户信息的解读,具体的用法和调用不在本文讨论范围之内,文章基于20161222版文档解读 API官方文档原文链接 小程序API官方定义: 框架提供丰富的 ...
- Python爬虫----Beautiful Soup4 基础
1. Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyth ...
- 12c windows auto installl
--config for oralce_envset ORACLE_HOME=c:\app\oracle\product\12.1.0\dbhome_1set ORACLE_SID=testuatse ...
- Hadoop-2.6.0安装文档
前段时间在dataguru上报了一个hadoop的培训班,希望能够帮助自己更快的了解.掌握并且熟悉hadoop的开发和原理. 上一期的作业是要自己搭建一个hadoop的环境,并能运行mapreduce ...