zoukankan      html  css  js  c++  java
  • Aizu 2170 Marked Ancestor

    题意:出一颗树,有两种操作:
    1. mark  u  标记结点u
    2.query  u  询问离u最近的且被标记的祖先结点是哪个
    让你输出所有询问的和。

    思路:数据量太小,直接暴力dfs就可以了

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<set>
    #include<queue>
    #include<string>
    #include<algorithm>
    #define MAXSIZE 100005
    #define LL long long
    using namespace std;
    
    int vis[MAXSIZE],pre[MAXSIZE];
    
    LL dfs(int p)
    {
        if(vis[p])
            return p;
        return dfs(pre[p]);
    }
    
    int main()
    {
        int n,m,num;
        LL sum;
        char op[5];
        while(scanf("%d%d",&n,&m),n+m)
        {
            sum = 0;
            memset(vis,0,sizeof(vis));
            vis[1] = 1;
            for(int i=2;i<=n;i++)
            {
                scanf("%d",&num);
                pre[i] = num;
            }
    
            while(m--)
            {
                scanf("%s%d",op,&num);
                if(op[0] == 'Q')
                {
                    sum += dfs(num);
                }
    
                else
                {
                    vis[num] = 1;
                }
            }
    
            printf("%lld
    ",sum);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    模板方法模式
    组合模式
    JS API文档
    支持 @connect写法
    PHP word导入题库
    go 复制文件和创建目录
    go文件写入
    go 文件读取
    gin连接mysql数据库
    gin多数据格式返回结果
  • 原文地址:https://www.cnblogs.com/alan-W/p/7288460.html
Copyright © 2011-2022 走看看