终于在PAT上提交了第一题
PAT Bug:
1) node_tree 这种全局变量不要在main里创建,这样是在栈上。改成全局变量。
2)scanf 竟然强制需要返回值
调试Bug
1)使用map进行layer和number的统计,但是map是按照key的升序,而不是value的升序
2)在现在的编译器中,不支持auto声明iterator,必须指定类型声明
3)在map迭代时,迭代器不支持比较大小,而需要使用!=end(),而不能使用<end()
#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
#include <map>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef vector< vector<int> > Vector2D;
vector<Node> node_tree[family_num];
struct Node{
int id;
int layer;
};
void BFS (vector<Node> *node_tree,map<int,int> &gen_population){
queue<Node> node_queue;
Node root_node;
root_node.id = 1;
root_node.layer=1;
node_queue.push(root_node);
while(!node_queue.empty()){
Node tmp_node;
tmp_node = node_queue.front();
node_queue.pop();
int current_id = tmp_node.id;
int current_layer = tmp_node.layer;
map<int,int>::iterator gen_iter=gen_population.find(current_layer);
if(gen_iter!=gen_population.end()){
gen_population[current_layer]=gen_population[current_layer]+1;
//cout<<"current_layer"<<current_layer<<"BooNa"<<endl;
}else{
gen_population[current_layer]=1;
//cout<<"current_layer"<<current_layer<<"BooYeah"<<endl;
}
//cout<<"current_layer"<<current_layer<<endl;
vector<Node>::iterator iter ;
if(!node_tree[current_id].empty()){
for (iter= node_tree[current_id].begin();iter<node_tree[current_id].end();iter++){
Node sub_tmp_node = *iter;
sub_tmp_node.layer=current_layer+1;
node_queue.push(sub_tmp_node);
//cout<<"DFS node "<<current_id<<"sub_id "<<sub_tmp_node.id<<"current_layer"<<sub_tmp_node.layer<<endl;
}
}
}
}
int main(int argc, char** argv) {
int unused __attribute__((unused));
int family_num,node_num;
map<int,int> gen_population;
unused=scanf("%d %d",&family_num,&node_num);
for (int i=0;i<node_num;i++) {
int tmp_node_id, sub_id_num;
unused=scanf("%d %d",&tmp_node_id,&sub_id_num);
for(int j=0;j<sub_id_num;j++){
Node node;
int sub_id;
unused=scanf("%d",&sub_id);
node.id = sub_id;
node.layer = -1;
node_tree[tmp_node_id].push_back(node);
//cout<<"node "<<tmp_node_id<<"sub_id "<<sub_id<<endl;
}
}
BFS (node_tree,gen_population);
map<int,int>::iterator iter,max_iter;
int max_population=0;
for (iter = gen_population.begin();iter!=gen_population.end();iter++){
if(iter->second>max_population){
max_population = iter->second;
max_iter=iter;
}
}
//int max_num = gen_population[4];
printf("%d %d",max_iter->second,max_iter->first);
return 0;
}