程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> UVA 12452 Plants vs. Zombies HD SP 樹形dp(水

UVA 12452 Plants vs. Zombies HD SP 樹形dp(水

編輯:C++入門知識

UVA 12452 Plants vs. Zombies HD SP 樹形dp(水


題目鏈接:點擊打開鏈接

題意:

給定n個點的樹[0,n)

開始所有邊都是無色。

有3種操作:

1、選一個點染其相連的邊 花費100

2、選一個點染其相連的2條邊 花費175

3、選一個點染其相連的所有邊 花費500

問:

染完所有邊的最小花費。邊可以重復染,點只能被操作一次。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
template 
inline bool rd(T &ret) {
	char c; int sgn;
	if(c=getchar(),c==EOF) return 0;
	while(c!='-'&&(c<'0'||c>'9')) c=getchar();
	sgn=(c=='-')?-1:1;
	ret=(c=='-')?0:(c-'0');
	while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
	ret*=sgn;
	return 1;
}
template 
inline void pt(T x) {
    if (x <0) {
        putchar('-');
        x = -x;
    }
    if(x>9) pt(x/10);
    putchar(x%10+'0');
}

using namespace std;
typedef long long ll;
const int N = 10100;
const ll inf = 1e10;
struct Edge{
	int to, nex;
}edge[N<<1];
int head[N], edgenum;
void add(int u, int v){
	Edge E = {v, head[u]};
	edge[edgenum] = E;
	head[u] = edgenum++;
}
void init(){memset(head, -1, sizeof head); edgenum = 0;}
int n;
ll dp[N][2];
/*
dp[i][0] : i的父邊選了
dp[i][1] : i的父邊不選

*/
void up(ll &x, const ll &y){
    if(y

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved