PAT 1021. Deepest Root (25)

来源:互联网 发布:淘宝减肥药排行榜十强 编辑:程序博客网 时间:2024/05/16 15:38
//1021. Deepest Root (25)//第二个case是测试N =0 的情况#include <iostream>#include <algorithm>#include <queue>#include <vector>using namespace std;vector<int> Road[10005];int VisitedNum = 0;bool visit[10005] = {false};int N;queue<int> q;int currlen = 0;int maxlen = 0;vector<int> result;void dfs(int curr){int i;if (currlen >= maxlen){if (currlen == maxlen){if (find(result.begin(), result.end(), curr)==result.end()){result.push_back(curr);}}else{maxlen = currlen;result.pop_back();if (find(result.begin(), result.end(), curr)==result.end()){result.push_back(curr);}}}for (i = 1;i<=N;i++){if (i!=curr && /*Road[i][curr] == true*/ find(Road[curr].begin(), Road[curr].end(), i)!=Road[curr].end() && visit[i] == false){visit[curr] = true;VisitedNum++;currlen++;dfs(i);visit[curr] = false;VisitedNum--;currlen--;}}}int main(){scanf("%d", &N);int i;int n1, n2;for (i = 1;i<N;i++){scanf("%d %d", &n1, &n2);Road[n1].push_back(n2);Road[n2].push_back(n1);}if (N == 1){printf("1\n");return 0;}//BFSint componentsnum = 0;int j;for ( j = 1;j<=N;j++){if (visit[j] == true){continue;}q.push(j);while(!q.empty()){int topnum = q.front();q.pop();for( i = 0 ;i<Road[topnum].size();i++){if (visit[Road[topnum][i]] == false){q.push(Road[topnum][i]);visit[Road[topnum][i]] = true;}}}if (q.empty()){componentsnum++;}}if (componentsnum != 1){printf("Error: %d components", componentsnum);return 0;}fill(visit, visit+N+1, false);VisitedNum = 1;visit[1]=true;dfs(1);  if (result.size()> 1){sort(result.begin(), result.end());for (i = 0;i<result.size();i++){printf("%d\n", result[i]);}return 0;}fill(visit, visit+N+1, false);VisitedNum = 1;visit[result[0]] = true;currlen = 0;//maxlen = 0; dfs(result[0]);sort(result.begin(), result.end());for (i = 0;i<result.size();i++){printf("%d\n", result[i]);}return 0;}

0 0
原创粉丝点击