芭芭拉冲鸭~(dfs树两点最大距离) |
您所在的位置:网站首页 › 芭芭拉被冲 › 芭芭拉冲鸭~(dfs树两点最大距离) |
树上两节点的最大距离
牛客网:题目链接: 感悟: 1.dfs的再理解,对树的遍历,用深度标记到根节点的距离。 2.树两点的最大距离的求解。 题意: 给定一棵无根树,树上每个节点被染成了红色或绿色或蓝色。(R=红色,G=绿色,B=蓝色) 一条边两个节点的颜色不同芭芭拉才能冲刺(即能形成一条边),问芭芭拉在这一颗树上能冲刺的最远距离 (不能重复经过一条边) 重点喔 思路: 实际是求树上两节点的最大距离,由于颜色相同的节点芭芭拉不能通过,就会使得树分割成多颗树, 保留根节点和子节点,用dfs遍历树的最大和次大深度,每次dfs之后,两深度之和的距离是以该根节点的最大距离,取其中距离最大的。 再解释一波 拿个图来解释一下吧: 题解代码如下: #include #include using namespace std; #define ll long long const int maxn=3e5+10; vector a[maxn]; int fa[maxn],visit[maxn]; int n; char s[maxn]; int maxdistance; int shendu(int x,int y){ //y是x的子节点,返回以y为根的树的最大深度 visit[y]=1; int max1=0,max2=0; //最大,次大 int ans; for(int i=0;i max2=max1; max1=ans; }else if(ans>max2){ max2=ans; } } maxdistance=max(maxdistance,max1+max2); return max1+1; } int main (){ cin>>n; cin>>s+1; int u,v; for(int i=1;i a[u].push_back(v); a[v].push_back(u); } } for(int i=1;i shendu(0,i); } } cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |