【DFS】rqnoj P172 圣诞树

来源:互联网 发布:mysql数据库读写分离 编辑:程序博客网 时间:2024/04/28 08:53

题目链接:http://www.rqnoj.cn/Problem_172.html

分析:

对于每个礼物,如果它还连着其他礼物,只能选一个,深搜解决。

具体实现方法:搜索每一个有连线的礼物,在它每一个连着的礼物中选一个价值最大的,递归搜索每一个礼物,如果是叶节点,便直接返回,否则继续搜索。

代码:

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<climits>using namespace std;int l[200][200]={0},s[200]={0},f[200],w[200];int i,j,k,n,t;char ch;void init(){   memset(f,-1,sizeof(f));   scanf("%d",&n);    for(i=1;i<=n;i++)   {     scanf("%d",&w[i]); ch=getchar();     t=0;     while(ch!='\n'&&ch!=EOF)     {      t++;      if(scanf("%d",&l[i][t])==EOF) break;      ch=getchar();     }     s[i]=t;    l[0][i]=i;   }   s[0]=n;  }void dfs(int kk){int i;if (f[kk]!=-1) return;    if (s[kk]==0) {f[kk]=w[kk];return;}    for ( i=1;i<=s[kk];i++)     {    if (f[l[kk][i]]==-1) dfs(l[kk][i]);    f[kk]=max(f[l[kk][i]],f[kk]);    }f[kk]+=w[kk];}int main(){   init();dfs(0);printf("%d\n",f[0]);return 0;}


原创粉丝点击