shupou
2016-03-08 21:41
267 查看
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<vector>
using namespace std;
const int maxx=140000;
vector<int> lin[maxx];
int deep[maxx],fa[maxx],top[maxx],in[maxx],bs[maxx];
int dfs1(int x,int pre,int d)
{
deep[x]=d;
fa[x]=pre;
in[x]=++num;
for (int i=0;i<lin[x].size();i++)
{
int nex=lin[x][i];
if (fa[x]==nex) continue;
dfs1(nex,x,d+1);
}
bs[x]=num-in[x]-1;
return;
}
int dfs2(int x,int t)
{
top[x]=t;
in[x]=++num;
int msize=0,hea=0;
if (lin[x].size()==1) return;
for (int i=0;i<lin[x].size();i++)
{
int nex;
nex=lin[x][i];
if (fa[x]==nex) continue;
if (bs[nex]>msize)
{
msize=be[nex];
hea=nex;
}
}
dfs2(hea,t);
for (int i=0;i<lin[x].size();i++
{
int nex=lin[x][i];
if (fa[x]==nex || hea==nex) continue;
dfs(nex,nex);
}
}
#include<string.h>
#include<stdio.h>
#include<vector>
using namespace std;
const int maxx=140000;
vector<int> lin[maxx];
int deep[maxx],fa[maxx],top[maxx],in[maxx],bs[maxx];
int dfs1(int x,int pre,int d)
{
deep[x]=d;
fa[x]=pre;
in[x]=++num;
for (int i=0;i<lin[x].size();i++)
{
int nex=lin[x][i];
if (fa[x]==nex) continue;
dfs1(nex,x,d+1);
}
bs[x]=num-in[x]-1;
return;
}
int dfs2(int x,int t)
{
top[x]=t;
in[x]=++num;
int msize=0,hea=0;
if (lin[x].size()==1) return;
for (int i=0;i<lin[x].size();i++)
{
int nex;
nex=lin[x][i];
if (fa[x]==nex) continue;
if (bs[nex]>msize)
{
msize=be[nex];
hea=nex;
}
}
dfs2(hea,t);
for (int i=0;i<lin[x].size();i++
{
int nex=lin[x][i];
if (fa[x]==nex || hea==nex) continue;
dfs(nex,nex);
}
}
相关文章推荐
- 操作系统笔记(二) 操作系统类型
- 物联网的关键 - 传感器
- leetcode:Median of Two Sorted Arrays 【Java】
- Android开发规范
- 安卓基础:使用HttpClient访问网络
- leetcode 27. Remove Element
- arm9的时钟和定时器
- 还是要踏实
- 算法小结-冒泡、选择排序、直接插入排序
- QT-QMainWindow布局设置
- 召回率和准确率
- OSX 的文件系统终端命令
- 字符流小说 分页功能!
- arp命令
- windows+ubuntu引导修复
- arm9的中断
- Docker入门教程(九)10个镜像相关的API
- Linux-github 搭建静态博客
- UITextView 文本垂直居中
- 全注解整合ssh