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将 ...
随机推荐
- ora2pg数据迁移
1.安装strawberry-perl-5.242.安装ora2pg-17.4 #perl Makefile.PL #dmake && dmake install3.安装ora2pg相 ...
- Java:注解(Annotation)自定义注解入门
转载地址:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的 ...
- IBM Minus One
IBM Minus One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- 【卷二】网络二—TCP服务器与客户端
经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得TCP: (Transmission Control Protocol) 传输控制协议? 还记得IP: (Internet Protocol ...
- 干货篇:揭开CSS盒模型神秘的面纱
写博客可以对学习内容进行总结.分享和交流(面对面的技术分享会也不错)... 如果是单纯的记录,印象笔记完全够了. 步入正题,盒模型是web布局核心,掌握基础知识,以后实战中会如鱼得水~ 概念与历史 C ...
- 一箭N雕:多任务深度学习实战
1.多任务学习导引 多任务学习是机器学习中的一个分支,按1997年综述论文Multi-task Learning一文的定义:Multitask Learning (MTL) is an inducti ...
- 负载均衡lvs_dr_tcp_http单调度
准备三台虚拟,均为CentOS6.5 x86_64注意,配置过程中,保持端口的一致性.director (eth0 192.168.1.189, vip eth0:0: 192.168.1.18) D ...
- IE8下 Select文字垂直居中的办法
.select { padding: 4px 0; height: 30px; line-height: 26px; vertical-align: middle;} 处理前: 处理后:
- qt5.6 for android
尝试在qt下写android的程序.测试,没有编译成功. 在选项-android配置页面,提示有"Qt version for 3 architectures are missing&quo ...
- JAVA语法基础(课堂ppt问题总结)
一:运行源代码EnumTest.java,分析运行结果. 代码如下: public class EnumTest { public static void main(String[] args) { ...