您当前的位置: 首页 > 

*DDL_GzmBlog

暂无认证

  • 1浏览

    0关注

    605博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[Luogu] CF763A Timofey and a tree

*DDL_GzmBlog 发布时间:2021-06-22 18:18:42 ,浏览量:1

目录
  • 前言
  • 思路
  • CODE:
https://www.luogu.com.cn/problem/CF763A

前言

写了我一个小时 卧槽 卡死了我了 一开始以为是 并查集缩点然后 dfs枚举 结果WA了 搞得头疼 然后看了一下题解 ? ? ? ? 直接枚举就行?

思路
  • 先处理 出来 有多少个分支 (即两个结点的颜色不同)
  • 然后再利用 dfs枚举每一个结点作为 根结点
  • 利用分支数相同这个 特点进判断

虽然思路很简单 就一个枚举 但是总感觉卡时间复杂度了 n =1e5跑一遍全图 也就是n*(n-1)/2 (emm)

还有就是dfs 好久没写了 感觉还挺难emm

CODE:
#include 
using namespace std;
const int N = 4e5+10;
int cnt;
int h[N],e[N],ne[N],idx,c[N];
int n,a,b;
void add(int a,int b)
{
    e[idx] = b,ne[idx] = h[a],h[a]=idx++;
}

void dfs(int x,int b)
{
    for(int i = h[x]; i!=-1; i=ne[i])
    {
        int j = e[i];
        if(j == b) continue;
        if(c[x]!=c[j])cnt++;

        dfs(j,x);
    }
}

void solve()
{
    cin>>n;
    memset(h,-1,sizeof h);

    for(int i = 1; i>a>>b;
        add(a,b);
        add(b,a);
    }
    for(int i=1; i>c[i];

    dfs(1,0);
    for(int i=1; i            
关注
打赏
1657615554
查看更多评论
0.0403s