码迷,mamicode.com
首页 > 其他好文 > 详细

COGS 2274. [HEOI 2016] tree

时间:2017-07-17 23:54:43      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:对比   class   clu   bool   dfs   else   cst   while   freopen   

★☆   输入文件:heoi2016_tree.in   输出文件:heoi2016_tree.out   简单对比
时间限制:1 s   内存限制:128 MB

技术分享

技术分享

技术分享

 

这道题数据弱到炸了 。

第一次做用树刨在链上找 A了。

第二次边都没连,直接赋值找爸爸 A了。。

屠龙宝刀点击就送

#include <ctype.h>
#include <cstdio>
#define M 100005

void read(int &x)
{
    x=0;
    bool f=0;
    char ch=getchar();
    while(!isdigit(ch)) {if(ch==-) f=1;ch=getchar();}
    while(isdigit(ch)) {x=x*10+ch-0;ch=getchar();}
    x=f?(~x)+1:x;
}
struct Edge
{
    int next,to;
    Edge (int next=0,int to=0) :next(next),to(to){}
}edge[M<<1];
int tim,cnt,fa[M],top[M],dep[M],belong[M],size[M],sign[M],N,Q,head[M];
void add(int u,int v)
{
    edge[++cnt]=Edge(head[u],v);
    head[u]=cnt;
}
void dfs1(int x)
{
    size[x]=1;
    dep[x]=dep[fa[x]]+1;
    for(int i=head[x];i;i=edge[i].next)
    {
        int v=edge[i].to;
        if(fa[x]!=v)
        {
            fa[v]=x;
            dfs1(v);
            size[x]+=size[v];
        }
    }
}
void dfs2(int x)
{
    belong[x]=++tim;
    int t=0;
    if(!top[x]) top[x]=x;
    for(int i=head[x];i;i=edge[i].next)
    {
        int v=edge[i].to;
        if(fa[x]!=v&&size[t]<size[v]) v=t; 
    }
    if(t) top[t]=top[x],dfs2(t);
    for(int i=head[x];i;i=edge[i].next)
    {
        int v=edge[i].to;
        if(fa[x]!=v&&v!=t) dfs2(v);
    }
}
int Chain_query(int x)
{
    for(;x;x=fa[x])
    if(sign[x]) return x;
}
int main()
{
    freopen("heoi2016_tree.in","r",stdin);
    freopen("heoi2016_tree.out","w",stdout);
    read(N);
    read(Q);
    sign[1]=1;
    for(int x,y,i=1;i<N;i++)
    {
        read(x);
        read(y);
        fa[y]=x;
    }
//    dfs1(1);
//    dfs2(1);
    char str[5];
    for(int x;Q--;)
    {
        scanf("%s",str+1);
        read(x);
        if(str[1]==C) sign[x]=1;
        else
        {
            if(sign[x]) printf("%d\n",x);
            else printf("%d\n",Chain_query(x));
        }
    }
    return 0;
}

 

COGS 2274. [HEOI 2016] tree

标签:对比   class   clu   bool   dfs   else   cst   while   freopen   

原文地址:http://www.cnblogs.com/ruojisun/p/7197479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!