您的位置:首页 > 其它

1004. Counting Leaves (30)

2013-11-12 16:39 501 查看
1004. Counting Leaves (30)

#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;

class A
{
public:
void init();
void run();
void output();
private:
enum{rid=1,N=100};
struct Arc
{
int index;
Arc *next;
};
void addchild(int fid,int cid);
Arc *tree
;
int n,m;
};

void A::addchild(int fid,int cid)
{
Arc *child,*tmp=tree[fid];
child=new Arc;
child->index=cid;
child->next = tmp;
tree[fid]=child;
}
void A::init()
{
int fid,cid,cnum;
memset(tree,0,N*sizeof(Arc*));
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",&fid,&cnum);
for(int j=0;j<cnum;j++)
{
scanf("%d",&cid);
addchild(fid,cid);
}
}
}
void A::run()
{
int cid,curcount,fnodecount,cnodecount;
Arc *tmp;
queue<int> qu;
if(tree[rid]==NULL)
{
printf("1");
}
else
{
printf("0");
qu.push(rid);
}
curcount=0;
fnodecount=1;
cnodecount=0;
while(!qu.empty())
{
cid=qu.front();
qu.pop();
fnodecount--;
tmp=tree[cid];
while(tmp!=NULL)
{
if(tree[tmp->index]==NULL) curcount++;
else {qu.push(tmp->index);cnodecount++;}
tmp=tmp->next;
}
if(fnodecount==0)
{
printf(" %d",curcount);
curcount=0;
fnodecount=cnodecount;
cnodecount=0;
}
}
}

int main()
{
//	freopen("test.in","r",stdin);
//	freopen("test.out","w",stdout);
A *a;
a=new A;
a->init();
a->run();
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  1004. Counting Leave