题意是给你一棵树    n个点 n-1条边   起点是1   每一个点都有权值 每次能从根节点走到叶子节点   经行k次游戏 每次都是从1開始    拿过的点的权值不能拿第二次   问最大权值和。

開始看到题时也没想到什么方法  就依照常规的来  结果超时了   试着优化了好多次  最后过了   百度题讲解是树链剖分    醉了    还没学!

。。

说说我的做法吧    map【i】=a表示i节点的跟节点为a节点   从全部叶子节点開始入队(有点队列里有三个变量  各自是节点编号  权值  深度  优先级看代码    里面有点贪心的意思) 每次走根节点   假设根节点没走过  则走它   并把该店权值变为0    否则直接跳到1这个节点(假设一个个跳可能会超时)再入队    当出队的编号为1时而且拿的个数小于游戏次数 则拿  否则结束  在跑深度的时候有个优化
    開始没有超时了            假设该节点深度已知了  则以后的根节点就不用跑了。!

详细看代码吧

#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
using namespace std; int map[100010],mark[100010];
int
Deep[100010];
__int64
num[100010];
struct
node
{
__int64
value;
int
ii;
int
deep;
bool operator < (const
node& x) const
{
return
deep<x.deep||(deep==x.deep&&value<x.value);
}
}
a;
int main()
{
int
T,i,j,n,k,r=1;
scanf("%d",&T);
while(
T--)
{

scanf("%d%d",&n,&k);
for(
i=1;i<=n;i++)
{

scanf("%I64d",&num[i]);
}

memset(mark,0,sizeof(mark));
for(
i=1;i<n;i++)
{
int
x,y;
scanf("%d%d",&x,&y);
mark[x]=1;
map[y]=x;
}

priority_queue<node>Q;
memset(Deep,0,sizeof(Deep));
for(
i=1;i<=n;i++)
{
if(
mark[i]==0)
{
int
x=map[i];
int
d=1;
while(
x!=1)
{
if(
Deep[x]>0) {d+=Deep[x];break;}
x=map[x];
d++;
}

x=i;
while(
x!=1)
{
if(
Deep[x]>0) break;
Deep[x]=d;
x=map[x];
d--;
}

a.deep=Deep[i];
a.value=num[i];
a.ii=i;
Q.push(a); }
}

//for(i=1;i<=n;i++)
//printf("%d ^^^ %d\n",i,Deep[i]);
__int64 sum=0;
int
cont=0;
while(!
Q.empty())
{

a=Q.top();
Q.pop();
int
x=map[a.ii];
/*while(num[x]==0&&x!=1)
{
x=map[x];
}*/
if(
a.ii==1)
{

a.value+=num[1];
num[1]=0;
sum+=a.value;
cont++;
if(
cont>=k) break;
}
else
{
if(
num[x]==0)
{

a.ii=1;
a.deep=0;
}
else
{

a.ii=x;
a.deep=Deep[x];
a.value+=num[x];
num[x]=0;
}

Q.push(a);
}
}

printf("Case #%d: %I64d\n",r++,sum);
}
return
0;
}

hdu5242 上海邀请赛 优先队列+贪心的更多相关文章

  1. [POI 2001+2014acm上海邀请赛]Gold Mine/Beam Cannon 线段树+扫描线

    Description  Byteman, one of the most deserving employee of The Goldmine of Byteland, is about to re ...

  2. 最高的奖励 - 优先队列&贪心 / 并查集

    题目地址:http://www.51cpc.com/web/problem.php?id=1587 Summarize: 优先队列&贪心: 1. 按价值最高排序,价值相同则按完成时间越晚为先: ...

  3. POJ2431 优先队列+贪心 - biaobiao88

    以下代码可对结构体数组中的元素进行排序,也差不多算是一个小小的模板了吧 #include<iostream> #include<algorithm> using namespa ...

  4. hdu3438 Buy and Resell(优先队列+贪心)

    Buy and Resell Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  5. HDU5090——Game with Pearls(匈牙利算法|贪心)(2014上海邀请赛重现)

    Game with Pearls Problem DescriptionTom and Jerry are playing a game with tubes and pearls. The rule ...

  6. ZOJ-3410Layton's Escape(优先队列+贪心)

    Layton's Escape Time Limit: 2 Seconds      Memory Limit: 65536 KB Professor Layton is a renowned arc ...

  7. CodeForces - 853A Planning (优先队列,贪心)

    Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...

  8. poj2431(优先队列+贪心)

    题目链接:http://poj.org/problem?id=2431 题目大意:一辆卡车,初始时,距离终点L,油量为P,在起点到终点途中有n个加油站,每个加油站油量有限,而卡车的油箱容量无限,卡车在 ...

  9. H - Expedition 优先队列 贪心

    来源poj2431 A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being ...

随机推荐

  1. linux命令(001) -- chkconfig

    一.准备知识 在说明chkconfig命令的用途之前,有必要先了解一下Linux系统中/etc/rc[0-6].d目录的用途. 众所周知,在Linux系统定义了7种不同的启动级别,这7种启动级别的含义 ...

  2. 再战primer——decltype 和引用

    刷primer看到原文讲到"引用从来都作为其所指对象的同义词出现,只有用在decltype处是一个例外.",我很是好奇. 这个“引用”当然是指引用类型,like this: ; i ...

  3. HeadFirst HTML&CSS

    CH1 认识HTML HTML和CSS是我们用来创建网页的语言:HTML是超文本标记语言(HyperText Markup Language)的缩写,用来建立网页的结构:CSS是层叠样式表(Casca ...

  4. 表格对象的获取和更改(原生js)

    表格对象的获取 var oT = document.getElementById("tb"); //获取head console.log(oT.tHead); console.lo ...

  5. git——merge和rebase的区别

    参考http://www.jianshu.com/p/129e721adc6e 我在公司里看到其他同事都使用git pull --rebase拉取远程代码,而我总是用git pull,也有同事和我说过 ...

  6. 联想 K10(K10e70) 免解锁BL 免rec Magisk Xposed 救砖 ROOT 版本号 S206

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...

  7. UICollectionView(一)基本概念

    整体预览 高等级的包含和管理(Top-level containment and management) UICollectionView UICollectionViewController UIC ...

  8. jboss 虚拟路径

    jboss 虚拟路径 上传文件到服务器时,保存到服务器发布应用外路径.这时,就要通过在jboss配置虚拟路劲以访问. 在standalong.xml里找到 <subsystem xmlns=&q ...

  9. java的四种引用,强弱软虚和jvm优化

    1.强引用(StrongReference)强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object();   //  强引用 当内存 ...

  10. BZOJ 3489: A simple rmq problem KDtree

    Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 100000000 #define mid ((l+r)> ...