CF 735E

原创 2018年04月16日 23:37:39

题目:

一棵树上有黑白两种颜色,一次染色能对相同颜色的区域取反,求几次染色可使得整棵树为同一种颜色。

PS: 还是刷不动F,心累。

题解:

缩点后求树的直径/2 。

不严谨证明:

把一棵树立起来,不断地对树根染色,这样就会发现只需要考虑最长的树链。同理,如果对树链上某一点着色,一定次数的操作后会等价于对树根染色,贪心地选取,这个点应该是最长树链的中点。

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;

int n;
int maxlen=0;
int duan=0;
int arr[201000];
int in[201000];
bool vis[201000];
bool vistuan[201000];
vector<int> vec[201000];
vector<int> tuan[201000];

void dfs(int bit,int x,int color){
    if(vis[x]) return ;
    if(arr[x]!=color) return ;
    in[x]=bit;
    vis[x]=true;
    for(int i=0;i<vec[x].size();i++){
        dfs(bit,vec[x][i],color);
    }
}

void findlen(int x,int len){
    if(vistuan[x]) return ;
    vistuan[x]=true;
    if(len>maxlen){
        duan=x;
        maxlen=len;
    }
    for(int i=0;i<tuan[x].size();i++){
        findlen(tuan[x][i],len+1);
    }
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>arr[i];
    for(int i=0;i<n-1;i++){
        int a,b;
        cin>>a>>b;
        vec[a].push_back(b);
        vec[b].push_back(a);
    }
    int bit=0;
    for(int i=1;i<=n;i++){
        if(!vis[i]){
            dfs(bit,i,arr[i]);
            bit++;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<vec[i].size();j++){
            int to=vec[i][j];
            if(in[i]!=in[to]){
                tuan[in[i]].push_back(in[to]);
            }
        }
    }
    findlen(1,1);
    maxlen=0;
    memset(vistuan,0,sizeof(vistuan));
    findlen(duan,1);
    cout<<maxlen/2<<endl;
}

CodeForces 735E Ostap and Tree

Description Ostap already settled down in Rio de Janiero suburb and started to grow a tree in his g...
  • jtjy568805874
  • jtjy568805874
  • 2016-11-29 13:49:05
  • 732

CodeForces - 735E

先婊一下这个傻逼题 说了k肯定小于20 我他妈开了25为什么一直wa?????? 开了70过了????????????????? 喵喵喵???????????????????????Ostap...
  • NineFailure
  • NineFailure
  • 2017-05-12 23:09:01
  • 80

Codeforces Round #382 (Div. 2) E. Ostap and Tree

题意,有一个树,可以在树上的节点上填黑色,问,保证每个节点距离问k以内都存在黑色节点的方案数。 dp[i][j]代表对于第i个节点当距离他距离为j的节点为黑色可取的方案数,因为要考虑分叉的情况,可能叙...
  • zstu_zy
  • zstu_zy
  • 2016-12-02 16:28:13
  • 441

【打CF,学算法】CodeForces网站简介

转自豆瓣:https://www.douban.com/review/5800694/ 你应当知道的关于Codeforces的事情 关于codeforces的文字 ...
  • David_Jett
  • David_Jett
  • 2016-07-12 10:11:43
  • 2147

易语言模块易语言模块

  • 2010年08月14日 23:20
  • 529KB
  • 下载

CF与OF有什么区别?

 = 问题 =   CF与OF有什么区别?  -----------------------------------------------------------------------------...
  • w9521423
  • w9521423
  • 2006-10-02 23:07:00
  • 3693

分清iOS中的OC和CF概念

在iOS世界,主要有两种对象:Objective-C 对象和 Core Foundation 对象。Core Foundation 对象主要是由C语言实现的 Core Foundation Frame...
  • weichuang_1
  • weichuang_1
  • 2015-12-05 00:03:12
  • 886

CF点充值CF点充值CF点充值CF点充值

  • 2011年03月23日 17:41
  • 674KB
  • 下载

CF卡技术详解——笔记

知识太全面了,摘抄摘不完,还是粘过来加上注释和笔记吧。 重点以及断句用加粗,注释用红括号。 一.CF卡技术及规格 一.CF卡技术及规格   ...
  • huqinweI987
  • huqinweI987
  • 2013-12-04 21:45:54
  • 16844

CF卡镜像备份及恢复系统

CF卡镜像备份及恢复系统 1.将运行的CF卡做成img镜像 1)用ls /dev/sd*观看当前有多少个磁盘,例如当前到sdb,则下一个是sdc 2)插入U盘到工控机上,再用上述命令,应该看到s...
  • yaoshenjie
  • yaoshenjie
  • 2017-01-09 17:23:30
  • 1975
收藏助手
不良信息举报
您举报文章:CF 735E
举报原因:
原因补充:

(最多只允许输入30个字)