PAT准备之2018.7.21

今天上午去学开车,下午打比赛(划水),晚上又在看中国新说唱。。。一直没刷PAT,结果一直等到半夜,第二天就开始中断是一个不好的行为啊。。。不要再拖延了。。。

今天只做了1004,说实话是一道比较裸的题目了,结果自己还是用了这么多时间。。
链接
1004 Counting Leaves (30)(30 分)
就是给你一棵树,让你求出每一层中没有孩子的节点(叶子节点)的个数(。直接BFS就可以了,不过记得要先把所以入度为0的点放入队列。

代码如下:

#include<bits/stdc++.h>

using namespace std;
const int MAX = 110;
set<int> st[MAX],vis;
int N,M;
int In[MAX];
void BFS(){
    queue<int> que;
    vector<int> vec,res;
    int sum = 0;
    //先把所有入度为0的节点放入
    for(int i=1;i<=N;++i){
        if(!In[i]){
            que.push(i);
        }
    }
    while(!que.empty()){
        int v = que.front();que.pop();
        //记录叶子节点
        if(st[v].size() == 0){
            sum++;
        }
        else{
            for(set<int>::iterator it = st[v].begin();it != st[v].end();++it){
                vec.push_back(*it);
            }
        }
        if(que.empty()){
            for(vector<int>::iterator it = vec.begin();it != vec.end();++it){
                que.push(*it);
            }
            vec.clear();
            res.push_back(sum);
            sum = 0;
        }
    }
    for(int i=0;i<res.size();++i){
        cout << res[i];
        if(i != res.size()-1)
            cout << " ";
        else
            cout << endl;
    }
}
int main(void){
    memset(In,0,sizeof(In));
    cin >> N >> M;
    int Id,K,Child;
    for(int i=1;i<=M;++i){
        cin >> Id >> K;
        for(int j=1;j<=K;++j){
            cin >> Child;
            In[Child]++;
            st[Id].insert(Child);
        }
    }
    BFS();

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值