返回信息流给出一棵有向树,一共有N(1<N≤1000)个节点,如果一个节点的度(入度+出度)不小于它所有儿子以及它父亲的度(如果存在父亲或儿子),那么我们称这个节点为p节点,现在你的任务是统计p节点的个数。
如样例,第一组的p节点为1,2,3;第二组的p节点为0。
输入格式
第一行为数据组数T(1≤T≤100)。
每组数据第一行为N表示树的节点数。后面为N-1行,每行两个数x,y(0≤x,y<N),代表y是x的儿子节点。
输出格式
每组数据输出一行,为一个整数,代表这棵树上p节点的个数。
2
5
0 1
1 2
2 3
3 4
3
0 2
0 1
输出:
3
1
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
// 结构体初始化
struct node{
vector<int> son;
int fu;
node(){
fu = 1001;
}
}no[1005];
int du[1005]={0};
int main(){
int T;
cin>>T;
while(T--){
int N;
//每行初始化
memset(du,0,sizeof(du));
cin>>N;
du[1001] = -5;
for(int i=0;i<N-1;i++){
int x,y;
cin>>x>>y;
no[y].fu = x;
no[x].son.push_back(y);
du[x]++;
du[y]++;
}
int ans = 0;
bool falg;
for(int i=0;i<N;i++){
if(du[i]>=du[no[i].fu]){
falg = true;
for(int j=0;j<no[i].son.size();j++){
if(du[no[i].son[j]]>du[i]){
falg = false;
break;
}
}
}else{
falg = false;
}
if(falg == true){
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #97714同步于 2019/3/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【讨论】【问题】北邮oj 统计p节点个数 大佬给看看哪里有问题
shawnallad
2019/3/7镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
代码里面写成了大于子节点应该改为大于等于子节点
【 在 shawnallad (纹银几两) 的大作中提到: 】
: 给出一棵有向树,一共有N(1<N≤1000)个节点,如果一个节点的度(入度+出度)不小于它所有儿子以及它父亲的度(如果存在父亲或儿子),那么我们称这个节点为p节点,现在你的任务是统计p节点的个数。
: 如样例,第一组的p节点为1,2,3;第二组的p节点为0。
: ...................