1021. Deepest Root (25)
来源:互联网 发布:神经网络 凸优化问题 编辑:程序博客网 时间:2024/06/05 01:13
刚开始题目没看清
n个节点有n-1条边,那么可以肯定当所有节点连成一个树时必无环
因此DFS得连通子图为一个时就是表明此时数无环,可以直接BFS求最大深度
用DFS得到连通子图个数(子图有环无环不要紧,能遍历就行)
第三个测试点用时885ms有点多
我的方法简单易懂
算法笔记是给出了利用一条BFS的头尾两个节点,分别对这两个节点BFS得到两个集合,取交集即为所求最大深度点集;
此外求连通子图算法笔记上用的并查集,暂时不会操作并查集。
#include<iostream>#include<vector>#include<queue>#include<algorithm>using namespace std;const int MAX = 10010;vector<int> child[MAX];//邻接表int visited[MAX],deep[MAX],deepmax[MAX]; int n;int BFS(int s){fill(visited,visited+MAX,0);fill(deep,deep+MAX,0);int dmax=1;queue<int> q;q.push(s);deep[s]=1;visited[s]=1;while(!q.empty()){int p=q.front();q.pop();for(int i=0;i<child[p].size();i++){if(visited[*(child[p].begin()+i)]==0){visited[*(child[p].begin()+i)]=1;q.push(*(child[p].begin()+i));deep[*(child[p].begin()+i)]=deep[p]+1;dmax=deep[p]+1; }}}return dmax;}void DFS(int s){visited[s]=1;for(int i=0;i<child[s].size();i++){if(visited[*(child[s].begin()+i)]==0){DFS(*(child[s].begin()+i));}}}int part(){//求连通子图个数 fill(visited,visited+MAX,0);int count=0;for(int i=1;i<=n;i++){if(visited[i]==0){count++;DFS(i);}}return count; }int main(){cin>>n;for(int i=0;i<n-1;i++){int st,ed;cin>>st;cin>>ed;child[st].push_back(ed);child[ed].push_back(st);}if(part()!=1){printf("Error: %d components\n",part());}else{int levelmax=0;for(int i=1;i<=n;i++){deepmax[i]=BFS(i);if(levelmax<deepmax[i]){levelmax=deepmax[i];}}for(int i=1;i<=n;i++){if(deepmax[i]==levelmax){printf("%d\n",i);}}}return 0;}
0 0
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- 1021. Deepest Root (25)
- jdk 环境变量配置
- Web基础之正则表达式
- POJ3461 字符串之模式匹配,kmp,求目标串中有多少个位置可重叠的子串
- Win32SDK对话框模板
- iOS第三方直播的集成
- 1021. Deepest Root (25)
- 程序调试
- 回溯法——迷宫问题
- Android数据库高手秘籍
- 马达电源处理
- VMware Workstation 的安装和使用
- Nodejs事件引擎libuv源码剖析之:高效线程池(threadpool)的实现
- 整理系列-20161111-Spark学习周记_5
- 回溯法——穷举所有排列