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