标签:was source cep sam click multiple oom href stdout
1 10 2 0 1 0 2 0 3 1 4 1 5 2 6 3 7 4 8 6 9
2
给定N个点,标号为0~N-1,还有N-1条边,数据保证N-1条边不成环,也就是说,输入的节点为N的一棵树。根节点为0,要你求深度大于d的节点的数目。
从根节点0開始,BFS其全部的子节点。统计深度小于等于d的节点的数目cnt。那么答案就是N-cnt。水题~
#include <queue> #include <cmath> #include <vector> #include <cstdio> #include <string> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define FIN freopen("input.txt","r",stdin) #define FOUT freopen("output.txt","w",stdout) typedef long long LL; const int MAXN = 1e6 + 50; struct Node { vector<int> son; } nodes[MAXN]; bool vis[MAXN]; void add_edge(int a, int b) { nodes[a].son.push_back(b); } struct Fuck { int pos, step; Fuck() {} Fuck(int _p, int _s) : pos(_p), step(_s) {} }; queue<Fuck> Que; int Dis, N; int BFS() { memset(vis,false,sizeof(vis)); int cnt = 0; Fuck Now(0, 0); Que.push(Now); vis[0] = true; while(!Que.empty()) { Now = Que.front(); Que.pop(); int nowp = Now.pos, nows = Now.step; if(nows == Dis) continue; for(int i = 0; i < nodes[nowp].son.size(); i++) { int sonp = nodes[nowp].son[i]; if(vis[sonp]) continue; Que.push(Fuck(sonp, nows + 1)); vis[sonp] = true; cnt ++; } } return N - cnt - 1; } int main() { // FIN; int T; scanf("%d", &T); while(T--) { scanf("%d%d", &N, &Dis); for(int i = 0; i < N; i++) nodes[i].son.clear(); for(int i = 1; i <= N - 1; i++) { int a, b; scanf("%d%d", &a, &b); add_edge(a, b); add_edge(b, a); } int ans = BFS(); printf("%d\n", ans); } return 0; }
标签:was source cep sam click multiple oom href stdout
原文地址:http://www.cnblogs.com/mfmdaoyou/p/7053856.html