又来问弱智问题了

P2016 战略游戏

dyyyyyczyz @ 2023-07-10 00:53:52

#include <bits/stdc++.h>
using namespace std;
int n,s[1501],k[1501],r[1501],fa[1501];
int dp[1501][2],ans=100000;
bool vi[1501];
vector <int> re[3001];
void add(int fr,int to)
{
    re[fr].push_back(to);
    re[to].push_back(fr);
}
void dfs(int x)
{
    if (vi[x]==0)
    {
        vi[x]=1;
        int i;
        dp[x][0]=0;
        dp[x][1]=1;
        if (re[x].size()==0) return;
        else
        {
            for (i=0;i<re[x].size();i++)
                {
                    dfs(re[x][i]);
                    dp[x][0]+=dp[re[x][i]][1];
                    dp[x][1]+=min(dp[re[x][i]][1],dp[re[x][i]][0]);
                }
        }

    }
}

int main()
{
    int i,j;
    cin>>n;
    for (i=1;i<=n;i++)
    {
        cin>>s[i]>>k[i];
        for (j=1;j<=k[i];j++)
        {
            cin>>r[j];
            add(s[i],r[j]);
        }
    }
    for (i=1;i<=n;i++)
    {
        dfs(i);
        ans=min(ans,min(dp[i][1],dp[i][0]));
        for (j=1;j<=n;j++)
        {
            vi[j]=0;
        }
    }
    cout<<ans;
    return 0;
}

也许又是晚上打的脑子糊涂了

我知道前向星写的不对,故意试试的

看了下题解感觉dp没啥问题啊。比较疑惑的地方在于题解里为什么不用每个节点当成根节点搜一遍,我觉得这和P1352那种明显有根的树不一样吧


by dyyyyyczyz @ 2023-07-10 00:58:44

等等编号从0开始,好像知道了


by InversionShadow @ 2023-07-10 07:36:03

你这不是链式前向星啊


|