HDU 5242 Game
来源:互联网 发布:如何自学电脑编程 编辑:程序博客网 时间:2024/06/02 05:29
HDU 5242 Game
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<vector>#define maxn 100005#define ll __int64#define INF 0x3fffffffusing namespace std;ll b[maxn];vector<ll> V[maxn];ll val[maxn];ll a[maxn];ll c[maxn],cor; ll n,m;void Init(){ memset(V,0,sizeof(V)); memset(b,0,sizeof(b)); memset(val,0,sizeof(val)); cor=0;}ll dfs(ll u){ if(val[u]) return val[u]; ll v,t=0; for(ll i=0;i<V[u].size();i++){ v=V[u][i]; if(b[v]==0){ b[v]=u; dfs(v); if(val[v]>val[t]) t=v; } } for(ll i=0;i<V[u].size();i++){ v=V[u][i]; if(b[v]==u){ b[v]=-1; if(v!=t) c[cor++]=val[v]; } } val[u]=val[t]+a[u]; return val[u];}bool cmp(ll a,ll b){ return a>b;}int main(){ ll T; scanf("%I64d",&T); ll ii=1; while(T--){ scanf("%I64d%I64d",&n,&m); Init(); for(ll i=1;i<=n;i++) scanf("%I64d",&a[i]); ll u,v; for(ll i=0;i<n-1;i++){ scanf("%d%d",&u,&v); V[u].push_back(v); V[v].push_back(u); } b[1]=-1; ll t=dfs(1); c[cor++]=t; sort(c,c+cor,cmp); ll ans=0; for(ll i=0;i<m&&i<cor;i++) ans+=c[i]; printf("Case #%I64d: %I64d\n",ii++,ans); } return 0;}
0 0
- hdu 5242 Game
- hdu - 5242 Game(链剖分)
- HDU 5242 Game
- HDU 5242 Game
- HDU 5242 Game
- hdu 5242 Game
- Game HDU
- Game HDU
- hdu 5242 Game(dfs+线段树)
- HDU-5242 Game (贪心&&树链剖分&&线段树)
- Hdu 5242 Game【Dfs+贪心】好题~
- HDU 2429 Word Game
- hdu 3074 Multiply game
- HDU 2419 Boring Game
- hdu 2429 Word Game
- HDU 3389 Game
- HDU 3657 Game
- HDU 1505 City Game
- C++Primer学习笔记之变量和基本类型
- vmware下启动Centos虚拟机报错虚拟无法打开磁盘
- linux 关闭警告音 or 错误提示音 提示 嘟嘟 or 滴滴
- HDOJ 4359 Easy Tree DP? DP
- 为啥REST如此重要?
- HDU 5242 Game
- 配额的软限制和硬限制 http://blog.chinaunix.net/uid-23177306-id-2531124.html
- Ubuntu14.04 install Boost
- hdu 1104 Remainder(BFS+数论)
- Cg Programming/Unity 目录
- Windows下使用Hadoop2.6.0-eclipse-plugin插件
- FMDatabaseQueue
- window上使用GIT的个人经验(入门级)
- spring注解