CodeForces 580C
来源:互联网 发布:万网域名增加二级 编辑:程序博客网 时间:2024/06/05 08:57
这个就是遍历一个树,让你找从头结点到未结点,含标记连续不超多k有多少个。。。
这个题,经典在于一开始我并不知道怎么解决是否为叶子节点的问题,这个题吧,就解决了。。。。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MaxN = 1e5;int n , m , ans , a[MaxN + 5];int all , last[MaxN + 5] , pre[2 * MaxN + 5] , other[2*MaxN + 5];void Build(int x , int y){ pre[++all] = last[x]; last[x] = all; other[all] = y;}void dfs(int x , int fa , int cnt){ if(cnt > m) return;//超过数量就返回 int num = 0; int ed = last[x]; while(ed != -1){ int dr = other[ed]; if(dr != fa){ if(a[dr] == 0) dfs(dr , x , 0); else dfs(dr , x , cnt + 1); num++;//找儿子有几个 } ed = pre[ed]; } if(num == 0) ans++;//如果没有儿子的话,那么就是叶子节点}int main(){ all = -1 ; memset(last , -1 , sizeof(last)); scanf("%d%d", &n , &m); for(int i = 1 ; i <= n ; i++) scanf("%d",&a[i]); for(int i = 1 ; i <= n - 1 ; i++){ int u , v; scanf("%d%d", &u , &v); Build(u,v); Build(v,u); } int cnt ; ans = 0; if(a[1] == 0) cnt = 0; else cnt = 1; dfs(1 , 0 , cnt); printf("%d\n",ans);}
0 0
- CodeForces 580C
- codeforces-580C-Kefa and Park【dfs】
- CodeForces 580C 树+dfs搜索
- Codeforces 580C Kefa and Park
- Codeforces 580C Kefa and Park 题解
- codeforces 580C Kefa and Park
- Codeforces-340-C(c++)
- Codeforces-507-C(c++)
- CodeForces 731C C
- CodeForces-612C C
- CODEFORCES 265C CODEFORCES, 265C
- codeforces #78 div2 C
- Codeforces 117C Cycle
- CodeForces 209C
- CodeForces 156C Cipher
- codeforces 148 div2 C
- codeforces 242C
- Codeforces-234C Weather
- [hard]450. Delete Node in a BST
- Sql的MakeValid与道格拉斯普克算法对比
- 嵌入式linux面试题解析——ARM部分
- eclipse 集成 svn
- Excel VBS编程技巧
- CodeForces 580C
- Java,求一个数的阶乘
- html中报错:xxx is not a function
- 设计原则之开放-封闭原则 javascript
- 调试技巧之调用堆栈 - Call stack
- 获得应用需要的所有权限并查看是否授权
- Jquery 获取复选框的值
- Android AndroidUtilCode-进程相关工具类
- 轻松搞定AIDL