记录编号 326282 评测结果 AAAAAAAAAA
题目名称 森林大礼包 最终得分 100
用户昵称 GravatarHzoi_chairman 是否通过 通过
代码语言 C++ 运行时间 0.591 s
提交时间 2016-10-21 07:12:08 内存使用 8.18 MiB
显示代码纯文本
  1. /*
  2. Name: 森林大礼包
  3. Copyright:
  4. Author: chairman
  5. Date: 21/10/16 07:13
  6. Description: 记忆化搜索
  7. */
  8. #include<iostream>
  9. #include<cstdio>
  10. #include<cstdlib>
  11. using namespace std;
  12. #define ll long long
  13. int read()
  14. {
  15. int x,f=1;
  16. char ch;
  17. while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
  18. x=ch-48;
  19. while(ch=getchar(),isdigit(ch))x=x*10+ch-48;
  20. return x*f;
  21. }
  22. void write(ll x)
  23. {
  24. if(x<0)putchar('-'),x=-x;
  25. int cnt=0;char ch[50];
  26. while(ch[++cnt]=x%10+48,x/=10);
  27. while(putchar(ch[cnt]),--cnt);
  28. putchar('\n');
  29. }
  30. #define maxe 1000100
  31. #define maxn 100100
  32. struct edge
  33. {
  34. int n,t;
  35. }a[maxe];
  36. int len,head[maxn];
  37. ll f[maxn],mod=1000000007;
  38. void insert(int x,int y)
  39. {
  40. a[++len].t=y;a[len].n=head[x];head[x]=len;
  41. }
  42. #define k a[i].t
  43. void dfs(int x)
  44. {
  45. for(int i=head[x];i;i=a[i].n)
  46. {
  47. if(f[k])f[x]+=f[k],f[x]%=mod;
  48. else
  49. {
  50. dfs(k);
  51. f[x]+=f[k];
  52. f[x]%=mod;
  53. }
  54. }
  55. }
  56. #undef k
  57. int main()
  58. {
  59. freopen("three_squirrels.in","r",stdin);
  60. freopen("three_squirrels.out","w",stdout);
  61. int n=read();
  62. for(int i=1;i<=n;i++)
  63. {
  64. int k=read(),y;
  65. for(int j=1;j<=k;j++)y=read(),insert(i,y);
  66. }
  67. f[0]=1;
  68. dfs(n);
  69. write(f[n]);
  70. // system("pause");
  71. fclose(stdin);
  72. fclose(stdout);
  73. }