• 【URAL 1018】Binary Apple Tree


    http://vjudge.net/problem/17662
    loli蜜汁(面向高一)树形dp水题

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    struct nodeTreeDP {
    	struct node {int nxt, to, w;} E[203];
    	int n, q, cnt, point[103], apple[103], left[103], right[103], f[103][103], size[103];
    	nodeTreeDP() {
    		cnt = 0;
    		memset(E, 0, sizeof(E));
    		memset(f, 0, sizeof(f));
    		memset(left, 0, sizeof(left));
    		memset(right, 0, sizeof(right));
    		memset(point, 0, sizeof(point));
    		memset(apple, 0, sizeof(apple));
    	}
    	
    	void ins(int u, int v, int w) {E[++cnt] = (node) {point[u], v, w}; point[u] = cnt;}
    	
    	void dfs(int x, int fa) {
    		if (x == 0) return;
    		for(int i = point[x]; i; i = E[i].nxt)
    			if (E[i].to != fa) {
    				apple[E[i].to] = E[i].w;
    				if (!left[x]) left[x] = E[i].to;
    				else right[left[x]] = E[i].to;
    			}
    		dfs(right[x], fa); dfs(left[x], x);
    		size[x] = size[left[x]] + size[right[x]] + 1;
    	}
    	
    	void TreeDP(int x) {
    		if (x == 0) return;
    		TreeDP(right[x]); TreeDP(left[x]);
    		
    		int tot = size[x], rightnum;
    		
    		for(int top = 0; top <= tot; ++top) {
    			f[x][top] = max(f[x][top], f[right[x]][top]);
    			for(int leftnum = 1; leftnum <= top; ++leftnum) {
    				rightnum = top - leftnum;
    				f[x][top] = max(f[x][top], f[left[x]][leftnum - 1] + apple[x] + f[right[x]][rightnum]);
    			}
    		}
    	}
    	
    	void ansit() {
    		TreeDP(left[1]);
    		printf("%d
    ", f[left[1]][q]);
    	}
    } *T;
    
    int main() {
    	T = new nodeTreeDP;
    	scanf("%d%d", &T->n, &T->q);
    	int u, v, w;
    	for(int i = 1; i < T->n; ++i) {
    		scanf("%d%d%d", &u, &v, &w);
    		T->ins(u, v, w);
    		T->ins(v, u, w);
    	}
    	T->dfs(1, 0);
    	T->ansit();
    	return 0;
    }
    
  • 相关阅读:
    转:[windows]DOS批处理添加任务计划
    转:winform_webApiSelfHost及 OWIN WebAPI Service
    Ubuntu上将终端安装到右键上
    Ubuntu上安装VMware tools
    OpenStack中的rabbitmq的配置方法
    centos上的grub文件修改
    centos7上安装0penStack
    怎样使用yum安装OpenStack
    epel扩展库的安装
    centos7上修改主机名
  • 原文地址:https://www.cnblogs.com/abclzr/p/5905025.html
Copyright © 2020-2023  润新知