传送门

树形dp

对于每个点维护其子节点的走法是否唯一,每次取最大的并且不为负的(停留次数-1)个子儿子权值,然后判断走法是否唯一

假如有子节点的权值为0,走法也不唯一

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
void read(int &x) {
char ch;bool ok;
for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar());
if(ok) x=-x;
}
#define rg register
const int maxn=1e5+10;
vector<pair<int,int> >s[maxn];
int n,m,f[maxn],pre[maxn*2],nxt[maxn*2],h[maxn],a[maxn],b[maxn],cnt,top;bool g[maxn];
void add(int x,int y)
{
pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt;
pre[++cnt]=x,nxt[cnt]=h[y],h[y]=cnt;
}
void dfs(int x,int fa)
{
f[x]=a[x];g[x]=0;b[x]--;
if(!b[x])return ;
for(rg int i=h[x];i;i=nxt[i])
if(pre[i]!=fa)dfs(pre[i],x),s[x].push_back(make_pair(f[pre[i]],g[pre[i]]));
sort(s[x].begin(),s[x].end());int now=0,t=s[x].size();
for(rg int i=1;i<=b[x];i++)
{
if(now==t||s[x][t-now-1].first<0)break;
if(!s[x][t-now-1].first)g[x]=1;
else g[x]|=s[x][t-now-1].second,f[x]=f[x]+s[x][t-now-1].first;
now++;
}
}
int main()
{
read(n);b[1]=1e9;
for(rg int i=2;i<=n;i++)read(a[i]);
for(rg int i=2;i<=n;i++)read(b[i]);
for(rg int i=1,x,y;i<n;i++)read(x),read(y),add(x,y);
dfs(1,0),printf("%d\n",f[1]);
if(g[1])printf("solution is not unique\n");
else printf("solution is unique\n");
}

最新文章

  1. Nodejs之MEAN栈开发(四)---- form验证及图片上传
  2. win7下装完ubuntu linux后,开机画面怎直接进入linux了,win7怎么启动
  3. MySQL学习记录--生成时间日期数据
  4. SetTimer 与 回调函数
  5. 如何在Notepad++ 中成功地安装Emmet 插件
  6. ajax实现文件上传
  7. Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)
  8. 【读书笔记】iOS-NSNumber
  9. Revit二次开发示例:DesignOptions
  10. arp -s 157.55.85.212 00-aa-00-62-c6-09 .... Adds a static entry.
  11. Golang全接触
  12. composer api 参考
  13. 浩哥解析MyBatis源码(十)——Type类型模块之类型处理器
  14. 您的快递(高并发服务器之poll和epoll)请签收
  15. 【DWM1000】 code 解密10 一 TAG 发送最后一个消息
  16. 修改css的(屏蔽)overflow: hidden;实现浏览器能把网页全图保存成图片
  17. Lavarel - 模块间复用代码
  18. const和volatile分析
  19. How to Start a Business in 10 Days
  20. phantomjs 的安装部署

热门文章

  1. Error: EACCES: permission denied, mkdir &#39;/root/.nvm/versions/node/......
  2. docker: Dockerfile命令介绍
  3. 如何强制ffmpeg编码时输出一个关键帧
  4. HTML5 实现文件拖放上传
  5. Service的两种启动方式
  6. CodeForces768B:Code For 1 (分治)
  7. NOIP2000提高组(RQNOJ314)方格取数
  8. bzoj4892
  9. 文本编辑器[notepad++] :一些快捷键
  10. MFC绘制直角坐标系