比赛 |
NOIP模拟赛by mzx Day2 |
评测结果 |
AAAAEEEEEE |
题目名称 |
森林大礼包 |
最终得分 |
40 |
用户昵称 |
1azyReaper |
运行时间 |
1.063 s |
代码语言 |
C++ |
内存使用 |
5.28 MiB |
提交时间 |
2016-10-20 19:21:08 |
显示代码纯文本
#include <fstream>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#define max 100100
#define mzx 1000000007
using namespace std;
ifstream fin("three_squirrels.in");
ofstream fout("three_squirrels.out");
class node
{
public:
int x,y,v,next;
}a[max*2];
int len=0,l[max*2];
int p[max],p1[max],p2[max];
int n,cd;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int ins(int xx,int yy,int vv)
{
a[++len].next=l[xx];l[xx]=len;
a[len].y=yy;a[len].v=vv;a[len].x=xx;
return 0;
}
int read()
{
fin>>n;
//cout<<n<<endl;
int c1;
for(int i=1;i<=n;i++)
{
fin>>cd;
//cout<<cd<<endl;
p1[i]=cd;
for(int j=1;j<=cd;j++)
{
fin>>c1;
//cout<<c1<<endl;
ins(c1,i,1);
}
}
p[0]=1;
return 0;
}
int dfs(int x)
{
for(int i=l[x];i;i=a[i].next)
{
p[a[i].y]+=p[x],p2[a[i].y]++;
if(p2[a[i].y]==p1[a[i].y])
dfs(a[i].y);
}
return 0;
}
int main(int argc, char** argv)
{
read();
dfs(0);
fout<<p[n]%mzx<<endl;
return 0;
}