zoukankan      html  css  js  c++  java
  • CF825G Tree Queries

    【题意】

    一棵树有n个节点,初始均为白色,有两种操作:

    1. 1 x 代表把结点 x 设置为黑色

    2. 2 x 代表查询 x 到树上任意一个黑色结点的简单路径上的编号最小的结点的编号

    输入 tz ,其中 t 表示操作类型, x=(last+z)mod n+1last代表上一次询问答案,初始为 0 ,保证第一个操作为 1

    【数据范围】

    n,q<=1e6.

    【题解】

    发现第一个操作保证是1,则可以以第一个染黑的点为根,则每个点到它路径上最小值dis[i]可以预处理出。

    发现一个点到所有黑点路径中编号最小的为每个黑点与这个点到根上的编号最小值。

    代码如下:

     

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+5;
    int n,q,last[N],dis[N],size,last1,opt,xx,zx;
    struct pigu
    {
        int dao,ne;
    }a[N<<1];
    inline void lingjiebiao(int x,int y)
    {
        a[++size].dao=y;
        a[size].ne=last[x];
        last[x]=size;
    }
    inline void dfs(int now,int fa)
    {
        dis[now]=min(dis[now],now);
        for(int i=last[now];i;i=a[i].ne)
        {
            if(a[i].dao==fa) continue;
            dis[a[i].dao]=dis[now];
            dfs(a[i].dao,now);
        }
    }
    inline int read()
    {
        char c=getchar();
        int x=0;
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) {x=(x<<3)+(x<<1)+c-'0';c=getchar();}
        return x;
    }
    int main()
    {
        memset(dis,0x3f,sizeof(dis));
        n=read();q=read();
        for(int i=1,x,y;i<=n-1;i++)
        {
            x=read();y=read();
            lingjiebiao(x,y);
            lingjiebiao(y,x);
        }
        opt=read();xx=read();
        int rt=xx%n+1;
        dfs(rt,0);
        zx=dis[rt];
        for(int i=1;i<=q-1;i++)
        {
            opt=read();xx=read();
            xx=(last1+xx)%n+1;
            if(opt==1)
            {
                zx=min(zx,dis[xx]);
            }
            else
            {
                cout<<min(zx,dis[xx])<<"
    ";
                xx=min(zx,dis[xx]);
                last1=xx;
            }
        }
    }
    View Code

     

     

     

  • 相关阅读:
    [SHOI2015]零件组装机
    [AH2017/HNOI2017]影魔
    空指针RE第一次公开赛-笔记
    i春秋2020新春公益赛WP
    博客园Markdown编辑器修改代码配色、添加代码行号
    buuctf Writeup
    关于Tarjan的一些问题
    NOIP2013D1T3货车运输 (生成树+树链剖分)
    1051: [HAOI2006]受欢迎的牛 (tarjan强连通分量+缩点)
    CodeForces 438D The Child and Sequence (线段树 暴力)
  • 原文地址:https://www.cnblogs.com/betablewaloot/p/12169078.html
Copyright © 2011-2022 走看看