比赛 |
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;
}