Day46: [PAT甲级] 1021 Deepest Root (25分)

Day46: [PAT甲级] 1021 Deepest Root (25分)

题源:

来自PAT真题库:

https://pintia.cn/problem-sets/994805342720868352/problems/994805482919673856

代码:

dirty code凑合看吧

#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<map>
#include<queue>
#include<set>
#include<cstdio>
#include<algorithm>
using namespace std;
int N;
vector<vector<int> > Graph;
bool collected[10001];
vector<int> res;
queue<int> que;
int d;
int BFS(int x) {
	int res = 0;
	que.push(x);
	collected[x] = true;
	while (!que.empty()) {
		bool flag = false;
		int x = que.front(); que.pop();
		for (int i = 0; i < Graph[x].size(); i++) {
			if (collected[Graph[x][i]] == false) {
				flag = true;
				que.push(Graph[x][i]);
				collected[Graph[x][i]] = true;
			}
		}
		if (flag) res++;
	}
	queue<int> empty;
	swap(empty, que);
	
	return res;
}
void DFS(int x,int deep) {
	d = max(d, deep);
	for (int i = 0;i<Graph[x].size(); i++) {
		if (collected[Graph[x][i]]==false) {
			collected[Graph[x][i]] = true;
			DFS(Graph[x][i],deep+1);
		}
	}
}
int main() {
	cin >> N;
	res.resize(N + 1, 0);
	Graph.resize(N + 1);
	if (N <= 1) {
		cout << 1;
		return 0;
	}
	int x, y;
	for (int i = 0; i < N - 1; i++) {
		cin >> x >> y;
		Graph[x].push_back(y);
		Graph[y].push_back(x);
	}
	int K = 0;
	int sum = 0;
	fill(collected,collected+10001,false);
	for (int i = 1; i <= N; i++) {
		if (collected[i] == false) {
			BFS(i);
			sum++;
		}
	}
	if (sum != 1) {
		printf("Error: %d components", sum);
	}
	else {
		int max = 0;
		for (int i = 1; i <= N; i++) {
				fill(collected, collected + 10001, false);
				collected[i] = true;
				DFS(i,0);
				res[i] = d;
				d = 0;
				max = max > res[i] ? max : res[i];
		}
		for (int i = 1; i <= N; i++) {
			if (res[i] == max) {
				printf("%d\n",i);
			}
		}
	}
	system("pause");
	return 0;
}
发布了49 篇原创文章 · 获赞 13 · 访问量 498

猜你喜欢

转载自blog.csdn.net/qq2215459786/article/details/103976329