日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

uva1218

發(fā)布時(shí)間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uva1218 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目

分析

一個(gè)節(jié)點(diǎn)有兩種狀態(tài),是或者不是,這就有點(diǎn)想01背包問(wèn)題,對(duì)于這類問(wèn)題我們只要定義好狀態(tài),然后每一個(gè)點(diǎn)都掃描一遍就可以了,令d[u][0]為u節(jié)點(diǎn)不是服務(wù)器的時(shí)候的解,那么d[u][0]=sum{min((d[v][0]),(d[v][1]))};因?yàn)樽庸?jié)點(diǎn)可以是服務(wù)器也可以不是,求所有子節(jié)點(diǎn)的最小解的和就可以了,令d[u][1]為u不是服務(wù)器,但是u的父節(jié)點(diǎn)是服務(wù)器的解,此時(shí)d[u][1]=sum(d[v][2]),(因?yàn)樽庸?jié)點(diǎn)一定不是服務(wù)器),d[u][2]為父節(jié)點(diǎn)和u都不是服務(wù)器的解,d[u][2]=min(d[u][2],d[u][1]+d[v][0]-d[v][2]),因?yàn)閡的子節(jié)點(diǎn)中只有一個(gè)節(jié)點(diǎn)為服務(wù)器,而d[u][1]=sum[d[v][2]],這里這樣可以減少計(jì)算量。

代碼

#include <stdio.h> #include <iostream> #include <string> #include <vector> #include <math.h> #include <algorithm> using namespace std; const int N = 10009; vector<int> g[N];//存放子節(jié)點(diǎn) int dp[N][3];void dfs(int u, int fa)//類似于01背包的掃描問(wèn)題,每一個(gè)狀態(tài)也就是節(jié)點(diǎn)只有兩個(gè)決策:是或不是 {dp[u][0] = 1;//u是服務(wù)器dp[u][1] = 0;//u不是服務(wù)器但是其父節(jié)點(diǎn)是dp[u][2] = N;//u不是服務(wù)器,父節(jié)點(diǎn)也不是服務(wù)器for (int i = 0; i<g[u].size(); i++){if (g[u][i] != fa)//子節(jié)點(diǎn)不等于父節(jié)點(diǎn){dfs(g[u][i], u);//把所有子節(jié)點(diǎn)都算出來(lái)dp[u][0] += min(dp[g[u][i]][0], dp[g[u][i]][1]);//子節(jié)點(diǎn)相互獨(dú)立dp[u][1] += dp[g[u][i]][2];}}for (int i = 0; i<g[u].size(); i++){if (g[u][i] != fa)dp[u][2] = min(dp[u][2], dp[u][1] + dp[g[u][i]][0] - dp[g[u][i]][2]);//利用d[u][1]=alld[v][2]} }int main() {int n;while (cin >> n){int a, b;for (int i = 1; i<n; i++){cin >> a >> b;g[a].push_back(b);g[b].push_back(a);}dfs(1, -1);cout << min(dp[1][0], dp[1][2]) << endl;cin >> a;if (a == -1)break;for (int i = 1; i <= n; i++)g[i].clear();}return 0; }

總結(jié)

以上是生活随笔為你收集整理的uva1218的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。