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 ; }
相关文章推荐
- Counting Sheep
- 线性排序:计数排序 Counting Sort 和 基数排序 Radix Sort
- AFNetworking+GCD处理并发问题
- 【HDU 5952 Counting Cliques】& DFS
- LeetCode oj 338. Counting Bits(DP)
- 1049. Counting Ones (30)
- Uva 12075 - Counting Triangles 解题报告
- Uva 580 - Critical Mass 解题报告(递推)
- Uva 417 - Word Index 解题报告(组合数)
- Uva 10497 - Sweet Child Makes Trouble 解题报告(递推+大数)
- Uva 10312 - Expression Bracketing 解题报告(卡特兰数+递推)
- Uva 10157 - Expressions 解题报告(递推)
- Uva 10081 - Tight Words 解题报告(递推)
- Uva 1510 - Neon Sign 解题报告(计数)
- Uva 11645 - Bits 解题报告(递推+大数)
- Uva 1393 - Highways 解题报告(递推)
- Uva 11038 - How Many O's? 解题报告(计数)
- Uva 10253 - Series-Parallel Networks 解题报告(递推)
- Uva 11401 - Triangle Counting 解题报告(计数)
- leetcode 338. Counting Bits