比赛 NOIP模拟赛by mzx Day2 评测结果 WWWWWWWWWW
题目名称 森林大礼包 最终得分 0
用户昵称 ghost 运行时间 0.961 s
代码语言 C++ 内存使用 44.18 MiB
提交时间 2016-10-20 20:57:32
显示代码纯文本
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=500001;
const int yu=1000000007;
int n;
int a[maxn][20];
int fa[maxn],dep[maxn];
int k[maxn];

/*int getfa(int k)
{
	if(fa[k]==k) return fa[k];
	fa[k]=getfa(fa[k]);
	//dep[k]=(dep[k]+dep[fa[k]])%yu;
	return fa[k];
}

void megre(int x,int y)
{
	if(y==0) return;
	int fx=getfa(x);
	int fy=getfa(y);
	fa[fx]=fy;
	//dep[fx]=(dep[fx]+dep[fy])%yu;
}*/

int main()
{
	freopen("three_squirrels.in","r",stdin);
	freopen("three_squirrels.out","w",stdout);
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>k[i];
		for(int j=1;j<=k[i];j++)
			cin>>a[i][j];
	}
	memset(dep,0,sizeof(dep));
	for(int i=0;i<n;i++)
		fa[i]=i;
	int sum=0;
	dep[0]=1;
	for(int i=1;i<n;i++)
	{
		for(int j=1;j<=k[i-1];j++)
		{
			//megre(a[i][j],a[i][j]-1);
			dep[i]=(dep[i]+dep[a[i-1][j]])%yu;
		}
	}
	cout<<dep[n-1]+dep[n-2]<<endl;
	return 0;
}