国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

A1021. Deepest Root (25)

2019-11-06 08:04:01
字體:
來源:轉載
供稿:網友

1021. Deepest Root (25)

時間限制1500 ms內存限制65536 kB代碼長度限制16000 B判題程序Standard作者CHEN, Yue

A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest tree. Such a root is called the deepest root.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (<=10000) which is the number of nodes, and hence the nodes are numbered from 1 to N. Then N-1 lines follow, each describes an edge by given the two adjacent nodes' numbers.

Output Specification:

For each test case, PRint each of the deepest roots in a line. If such a root is not unique, print them in increasing order of their numbers. In case that the given graph is not a tree, print "Error: K components" where K is the number of connected components in the graph.

Sample Input 1:
51 21 31 42 5Sample Output 1:
345Sample Input 2:
51 31 42 53 4Sample Output 2:
Error: 2 components
bfs判斷連通塊個數進而判斷是否是樹再依次枚舉每個節點用數組記錄深度,同時記錄最大深度,遍歷數組輸出最大深度節點(從小到大遍歷輸出)
#include<cstdio>#include<vector>#include<queue>#include<algorithm>using namespace std;const int maxn = 1e4 + 10;bool flag[maxn] = {false};vector<int> G[maxn];int deepestRoot = -1, dep[maxn];int dfs(int x){  if(flag[x]) return 0;  flag[x] = true;  int depRoot = 0;  for(int i = 0; i < G[x].size(); ++i){    int deep = 1;    deep += dfs(G[x][i]);    if(deep > depRoot) depRoot = deep;  }  if(depRoot > deepestRoot) deepestRoot = depRoot;  return depRoot;}void bfs(int x){         //bfs判斷連通塊,也可以用并查集  if(flag[x]) return ;  flag[x] = true;  queue<int> Q;  Q.push(x);  while(!Q.empty()){    int top = Q.front();    Q.pop();    for(int i = 0; i < G[top].size(); ++i){      if(!flag[G[top][i]]){        flag[G[top][i]] = true;        Q.push(G[top][i]);      }    }  }}int main(){  //freopen("1021.txt", "r", stdin);    int n, v1, v2;  scanf("%d", &n);  for(int i = 1; i < n; ++i){    scanf("%d %d", &v1, &v2);    G[v1].push_back(v2);    G[v2].push_back(v1);  }  int cycleNum = 0;  for(int i = 1; i <= n; ++i){    if(!flag[i]){      ++cycleNum;      bfs(i);    }  }  if(cycleNum <= 1){  for(int i = 1; i <= n; ++i){    fill(flag + 1, flag + n + 1, 0);    dep[i] = dfs(i);  }  for(int i = 1; i <= n; ++i){    if(deepestRoot == dep[i]){      printf("%d/n", i);    }  }  }else{    printf("Error: %d components", cycleNum);  }  //fclose(stdin);  return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彭阳县| 阿瓦提县| 宜兰县| 务川| 旬邑县| 雷山县| 虹口区| 图片| 湘潭县| 连山| 洞头县| 辽宁省| 阳高县| 朔州市| 石景山区| 巴里| 连平县| 博罗县| 尚义县| 桂平市| 沁水县| 灌南县| 石泉县| 迭部县| 称多县| 台东市| 东台市| 乌兰浩特市| 石家庄市| 长丰县| 巍山| 礼泉县| 砀山县| 台江县| 庆城县| 平原县| 红河县| 弥渡县| 阳新县| 沅江市| 莲花县|