比赛 NOIP模拟赛by mzx Day2 评测结果 C
题目名称 森林大礼包 最终得分 0
用户昵称 wyj 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2016-10-20 18:56:39
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<ctime>
using namespace std;
int n,hh;
int b[100100],h[100100],kk[100100];
long long mod=1000000000+7;
struct node
{
  int x,y,v,next;
}a[200200];
int link[200200],len=0;
void insert(int xx,int yy,int vv)
{
  a[++len].next=link[xx];link[xx]=len;
  a[len].y=yy;a[len].v=vv;a[len].x=xx;
}
void init()
{
  cin>>n;int c1;
  for(int i=1;i<=n;i++)
  {
    cin>>hh;h[i]=hh;
	for(int j=1;j<=hh;j++)
    {
	   cin>>c1;
	   insert(c1,i,1);
	}
  }
  b[0]=1;
}
void dfs(int x)
{
  for(int i=link[x];i;i=a[i].next)
  {
	 b[a[i].y]=(b[a[i].y]+b[x])%mod,kk[a[i].y]++;
	 if(kk[a[i].y]==h[a[i].y])  dfs(a[i].y);
  }
}
int main()
{
  freopen("three_squirrels.in","r",stdin);
  freopen("three_squirrels.out","w",stdout);
  init();
  dfs(0);
  cout<<b[n]<<endl;
  return 0;
}