【树形dp】UVALive 2038 Strategic game

来源:互联网 发布:国内代购知乎 编辑:程序博客网 时间:2024/04/29 14:50

题目点这里

水水水水水の入门题  = =。。只是为了弥补我一年多以来树形dp从来没有ac过的遗憾!!!(呵呵!!)

顺带吐槽一下lrj的题面再次翻译错了2333333


这个代码真的是我写的。。。 = =

不要问我代码风格是怎么回事。。。。。。

是xcode的神代码补全干的。。。。


#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int Nmax = 1505;int N;int dp[Nmax][3];struct ed{    int v, next;}e[Nmax * 2];int k, head[Nmax];inline void adde(int u, int v){    e[k] = (ed) { v, head[u] };    head[u] = k++;}int dfs(int u, int flag, int fa){    if (~dp[u][flag]) return dp[u][flag];    int &ans = dp[u][flag] = flag;    for (int i = head[u]; i; i = e[i].next) {        int v = e[i].v; if (v == fa) continue;        if (flag) ans += min(dfs(v, 0, u), dfs(v, 1, u));        else ans += dfs(v, 1, u);    }    return ans;}int main(){    while (~scanf("%d", &N)) {        int u, v, m;        memset(head, 0, sizeof(head)); k = 1;        for (int i = 1; i <= N; ++i) {            scanf("%d:(%d)", &u, &m);            while (m--) {                scanf("%d", &v);                adde(u, v); adde(v, u);            }        }        memset(dp, -1, sizeof(dp));        printf("%d\n", min(dfs(0, 0, -1), dfs(0, 1, -1)));    }     return 0;}



0 0
原创粉丝点击