记录编号 |
16086 |
评测结果 |
AAAAAAAAA |
题目名称 |
[POI 2000] 滑雪队 |
最终得分 |
100 |
用户昵称 |
.Xmz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.027 s |
提交时间 |
2010-04-19 16:03:58 |
内存使用 |
30.80 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
const int maxn=5000+1;
const int maxm=2000*2000;
struct edge
{
int t;
edge *next;
}E[maxm],*V[maxn];
int eh;
inline void addedge(int a,int b)
{
E[++eh].next=V[a]; V[a]=E+eh; V[a]->t=b;
}
int n,ans;
void init()
{
scanf("%d",&n);
int t,tt;
for (int i=1;i<n;i++)
{
scanf("%d",&t);
for (int j=1;j<=t;j++)
{
scanf("%d",&tt);
addedge(i,tt);
}
}
}
bool y[maxn];
bool dfs(int u)
{
bool re=false;
y[u]=true;
for (edge *e=V[u];e;e=e->next)
{
int v=e->t;
if (v==n)
{
ans++;
re=true;
if (u!=1)break;
}
if (!y[v] && dfs(v))
{
re=true;
if (u!=1) break;
}
}
return re;
}
int main()
{
freopen("nar.in","r",stdin);
freopen("nar.out","w",stdout);
init();
dfs(1);
printf("%d\n",ans);
return 0;
}