当前位置: 首页 > news >正文

codeforces 734E(DFS,树的直径(最长路))

题目链接:http://codeforces.com/contest/734/problem/E

题意:有一棵黑白树,每次操作可以使一个同色连通块变色,问最少几次操作能使树变成全黑或全白。

思路:先进行缩点,同色连通块当作一点,用dfs实现并得到新图。答案即为(最长直径+1)/2。

关于最长直径的求法:http://www.cnblogs.com/wuyiqi/archive/2012/04/08/2437424.html

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N = 2e5 + 5;
 5 int col[N],refl[N],maxdis,maxpos;
 6 vector <int> G[N],E[N];
 7 bool vis[N];
 8 void dfs(int x,int cur)
 9 {
10     if(vis[x])
11         return;
12     vis[x] = 1;
13     if(col[x] != col[cur])
14     {
15         E[x].push_back(cur);
16         E[cur].push_back(x);
17         cur = x;
18     }
19     for(int i = 0; i < G[x].size(); i++)
20         dfs(G[x][i],cur);
21 }
22 void DFS(int x,int dis)
23 {
24     if(vis[x])
25         return;
26     vis[x] = 1;
27     if(dis > maxdis)
28     {
29         maxdis = dis;
30         maxpos = x;
31     }
32     for(int i = 0; i < E[x].size(); i++)
33         DFS(E[x][i],dis + 1);
34 }
35 int main()
36 {
37     int n;
38     scanf("%d",&n);
39     for(int i = 1; i <= n; i++)
40         scanf("%d",col + i);
41     for(int i = 1; i <= n - 1; i++)
42     {
43         int u,v;
44         scanf("%d %d",&u,&v);
45         G[u].push_back(v);
46         G[v].push_back(u);
47     }
48     dfs(1,1);
49     memset(vis,0,sizeof(vis));
50     DFS(1,0);
51     memset(vis,0,sizeof(vis));
52     DFS(maxpos,0);
53     printf("%d\n",(maxdis + 1) >> 1);
54     return 0;
55 }

 

转载于:https://www.cnblogs.com/westwind1005/p/6081819.html

相关文章:

  • php-fpm服务启动脚本
  • html关于图片和链接的笔记
  • jQuery 语法
  • 【FFMPEG】FFMPEG介绍
  • [原创软件]Maya语言切换工具
  • 【GoLang】GoLang 错误处理 -- 异常处理思路示例
  • Tower 实战一:MavLink的连接与通信
  • hive 数据清理--数据去重
  • rails生成器生成自定义controller模板
  • 关于适配器中设置显示与隐藏的问题
  • 递归的例子
  • 各种居中对齐
  • 面向对象 封装 、继承
  • [学习笔记]背包问题(一)
  • SQL 基础语法(一)
  • ➹使用webpack配置多页面应用(MPA)
  • 0基础学习移动端适配
  • ERLANG 网工修炼笔记 ---- UDP
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • 区块链共识机制优缺点对比都是什么
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • nb
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • mysql面试题分组并合并列
  • 阿里云服务器购买完整流程
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #数学建模# 线性规划问题的Matlab求解
  • (3)nginx 配置(nginx.conf)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (翻译)terry crowley: 写给程序员
  • (分类)KNN算法- 参数调优
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .“空心村”成因分析及解决对策122344
  • .java 9 找不到符号_java找不到符号
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 设置默认首页
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • .py文件应该怎样打开?
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @RequestBody与@ResponseBody的使用
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Android]使用Android打包Unity工程
  • [Everyday Mathematics]20150130
  • [ffmpeg] av_opt_set 解析
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [JavaWeb学习] Spring Ioc和DI概念思想
  • [LeetCode]-225. 用队列实现栈-232. 用栈实现队列
  • [Linux] LVS+Keepalived高可用集群部署