zoukankan      html  css  js  c++  java
  • bzoj4423: [AMPPZ2013]Bytehattan

    昨天A狼抓兔子的时候无意被tyb队长看到了……

    然后就是一个早上的血泪史,终于AC了,还好我没精A(tyb:这就是你烦我三次的理由)

    一烦tyb,ta告诉我,删边就在对偶图连,然后我就用两小时做了一个基本AC的解。。。然后想啊想代码200+

    二烦tyb,我满怀信心的拿着图,指指点点,ta说:是啊!然后嘞?我说:???哦!我傻逼了,询问联通的两个点是肯定是相连的,怒减100+。。。

    三烦tyb,正当我跪在电脑前想如何判断环时,tyb和善??的走过来,告诉我如果两个点如果是联通的,然后现在再连一次,那肯定是环啦!

    不解释代码和做法了了

    #include<cstdio>
    #include<cstring>
    using namespace std;
    int fa[5100000];
    int findfa(int x)
    {
        if(x==fa[x])return x;
        fa[x]=findfa(fa[x]);return fa[x];
    }
    int n,st,ed;
    int point(int x,int y)
    {
        return (x-1)*(n-1)+y;
    } 
    bool linkud(int x,int y)
    {
        int p1,p2;
        if(x==2)
        {
            p1=st;
            p2=point(x,y);
        }
        else if(x==n-1)
        {
            p1=point(x-1,y);
            p2=ed;
        }
        else
        {
            p1=point(x-1,y);
            p2=point(x,y);
        }
        int f1=findfa(p1),f2=findfa(p2);
        if(f1==f2)return false;
        else {fa[f1]=f2;return true;}
    }
    bool linklr(int x,int y)
    {
        int p1,p2;
        if(y==2)
        {
            p1=point(x,y);
            p2=(x*2>=n)?st:ed;
        }
        else if(y==n-1)
        {
            p1=point(x,y-1);
            p2=(x*2>=n)?st:ed;
        }
        else
        {
            p1=point(x,y-1);
            p2=point(x,y);
        }
        int f1=findfa(p1),f2=findfa(p2);
        if(f1==f2)return false;
        else {fa[f1]=f2;return true;}
    }
    char ss[2][5];
    int xx[2],yy[2];
    int main()
    {
        int T;
        scanf("%d%d",&n,&T);n+=2;
        st=(n-1)*(n-1)+1;
        ed=(n-1)*(n-1)+2;
        for(int i=1;i<=ed;i++)fa[i]=i;
        for(int i=1;i<=n;i++)
        {
            fa[point(1,i)]=0;
            fa[point(n,i)]=0;
            fa[point(i,1)]=0;
            fa[point(i,n)]=0;
        }
        
        int x,y;char cc;
        bool bk=true;
        while(T--)
        {
            scanf("%d%d%s",&xx[0],&yy[0],ss[0]+1);
            scanf("%d%d%s",&xx[1],&yy[1],ss[1]+1);
            if(bk==true){x=xx[0]+1;y=yy[0]+1;cc=ss[0][1];}
            else        {x=xx[1]+1;y=yy[1]+1;cc=ss[1][1];}
        
            if(cc=='N')
            {
                bk=linkud(x,y);
                if(bk==true)printf("TAK
    ");
                else         printf("NIE
    ");
            }
            else 
            {
                bk=linklr(x,y);
                if(bk==true)printf("TAK
    ");
                else         printf("NIE
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    覆盖索引和联合索引
    docker是个啥?
    golang--解决邮件发送标题乱码问题
    爬虫-爬取美少女壁纸
    漫谈--ssh协议-中间人攻击
    golang--常用的字符串操作
    干支纪年
    JS实现纯前端将数据导出Excel两种方式亲测有效
    猴子吃香蕉-Java岗位面试题
    content:"26A1"特殊字符和图标记录
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/7655549.html
Copyright © 2011-2022 走看看