生活随笔
收集整理的這篇文章主要介紹了
【Uva 12093】Protecting Zonk
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【Link】:
【Description】
n個節點的樹;
每個節點都可以選擇3種
1.覆蓋和它相連的邊; c1花費;
2.覆蓋和它相連的邊以及和它相連的點相連的邊; c2花費;
3.不進行操作
覆蓋所有的邊的最小花費;
【Solution】
【NumberOf WA】
0
【Reviw】
樹形DP多想想,感覺不是那么難.
【Code】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define ri(x) scanf("%d",&x)
#define rl(x) scanf("%lld",&x)
#define rs(x) scanf("%s",x+1)
#define oi(x) printf("%d",x)
#define ol(x) printf("%lld",x)
#define oc putchar(' ')
#define all(x) x.begin(),x.end()
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)typedef pair<
int,
int> pii;
typedef pair<LL,LL> pll;
const int dx[
9] = {
0,
1,-
1,
0,
0,-
1,-
1,
1,
1};
const int dy[
9] = {
0,
0,
0,-
1,
1,-
1,
1,-
1,
1};
const double pi =
acos(-
1.0);
const int N =
1e4;
const int INF =
0x3f3f3f3f;
int n,c1,c2,g[N+
10][
3],f[N+
10][
3];
vector <int> G[N+
10];
void dfs(
int x,
int fa){
if (x!=
1 && (
int) G[x].size()==
1){g[x][
0] =
0,g[x][
1] = INF,f[x][
1] = c1,f[x][
2] = c2;g[x][
2] = INF;
return;}
int len = G[x].size();g[x][
0] =
0;rep1(i,
0,len-
1){
int y = G[x][i];
if (y==fa)
continue;dfs(y,x);g[x][
0] += min(g[y][
1],f[y][
1]);}g[x][
1] =
0;
int t = INF;f[x][
1] = c1,f[x][
2] = c2,g[x][
2] =
0;rep1(i,
0,len-
1){
int y = G[x][i],temp1;
if (y==fa)
continue;temp1 = min(f[y][
1],f[y][
2]);temp1 = min(temp1,g[y][
1]);temp1 = min(temp1,g[y][
0]);g[x][
1] += temp1;t = min(t,f[y][
2]-temp1);f[x][
1] += temp1;g[x][
2] += temp1;temp1 = min(temp1,g[y][
2]);f[x][
2] += temp1;}g[x][
1] += t;
}
int main(){
while (~ri(n)){ri(c1),ri(c2);
if (n==
0)
break;rep1(i,
1,n) G[i].clear();rep1(i,
1,n-
1){
int x,y;ri(x),ri(y);G[x].pb(y),G[y].pb(x);}dfs(
1,
0);
int ans = min(g[
1][
0],g[
1][
1]);ans = min(ans,f[
1][
1]),ans = min(ans,f[
1][
2]);oi(ans);
puts(
"");}
return 0;
}
轉載于:https://www.cnblogs.com/AWCXV/p/7626136.html
總結
以上是生活随笔為你收集整理的【Uva 12093】Protecting Zonk的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。