Submission #18628

# Submission time Handle Problem Language Result Execution time Memory
18628 2016-02-12T20:37:07 Z ggoh Tropical Garden (IOI11_garden) C++
0 / 100
3 ms 1500 KB
#include "garden.h"
#include "gardenlib.h"
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<deque>
#include<vector>
int a,b,c,t,h,p,q,check,p1,q1,y,z,sz1,sz2,v[150003][2],ch[150003][2],x[150003][2],D[150003][2],cycle[150003][2];
void count_routes(int N,int M,int P,int R[][2],int Q,int G[])
{
    a=N;b=M;
    c=P+1;
    for(int i=0;i<b;i++)
    {
        if(x[R[i][0]+1][0]==0)x[R[i][0]+1][0]=R[i][1]+1;
        else if(x[R[i][0]+1][1]==0)x[R[i][0]+1][1]=R[i][1]+1;
        if(x[R[i][1]+1][0]==0)x[R[i][1]+1][0]=R[i][0]+1;
        else if(x[R[i][1]+1][1]==0)x[R[i][1]+1][1]=R[i][0]+1;
    }
    for(int i=1;i<=a;i++)
    {
        if(x[i][1]==0)x[i][1]=x[i][0];
    }
    p=c;q=0;t=0;
    D[p][q]=0;
    ch[p][q]=1;

    v[p][q]=1;
    p1=-1;q1=-1;
    while(1)
    {
        if(q==0)p1=x[p][0];
        else p1=x[p][1];
        if(p==x[p1][0])q1=1;
        else q1=0;
        if(p1==c&&q1==0)break;
        else
        {
            if(v[p1][q1]==1)break;
            v[p1][q1]=1;
            p=p1;q=q1;
            t++;
        }
    }
    if(p1==c&&q1==0)
    {
        p=c;q=0;
        while(1)
        {
            if(q==0)p1=x[p][0];
            else p1=x[p][1];
            if(p==x[p1][0])q1=1;
            else q1=0;
            if(p1==c&&q1==0)break;
            p=p1;q=q1;
            ch[p][q]=1;
            D[p][q]=t;t--;
        }
    }
    memset(v,0,sizeof(v));

    p=c;q=1;t=0;
    D[p][q]=0;
    ch[p][q]=1;

    v[p][q]=1;
    p1=-1;q1=-1;
    while(1)
    {
        if(q==0)p1=x[p][0];
        else p1=x[p][1];
        if(p==x[p1][0])q1=1;
        else q1=0;
        if(p1==c&&q1==1)break;
        else
        {
            if(v[p1][q1]==1)break;
            v[p1][q1]=1;
            p=p1;q=q1;
            t++;
        }
    }
    if(p1==c&&q1==1)
    {
        p=c;q=1;
        while(1)
        {
            if(q==0)p1=x[p][0];
            else p1=x[p][1];
            if(p==x[p1][0])q1=1;
            else q1=0;
            if(p1==c&&q1==1)break;
            p=p1;q=q1;
            if(ch[p][q]==0){
            ch[p][q]=1;
            D[p][q]=t;
            }
            else if(D[p][q]>t)
            {
                D[p][q]=t;
            }
            t--;
        }
    }

    memset(v,0,sizeof(v));
    for(int i=1;i<=a;i++)
    {
        for(int j=0;j<2;j++)
        {
            if(ch[i][j])continue;
            p=i;q=j;t=0;
            v[i][j]=1;
            while(1)
            {
                if(q==0)p1=x[p][0];
                else p1=x[p][1];
                if(p==x[p1][0])q1=1;
                else q1=0;
                t++;
                if(ch[p1][q1])break;
                else if(v[p1][q1])break;
                p=p1;q=q1;
                v[p][q]=1;
            }
            if(ch[p1][q1])
            {
                y=p1;z=q1;
                p=i;q=j;
                ch[p][q]=1;
                D[p][q]=D[y][z]+t;
                while(1)
                {
                    if(q==0)p1=x[p][0];
                    else p1=x[p][1];
                    if(p==x[p1][0])q1=1;
                    else q1=0;
                    t--;
                    if(p1==y&&q1==z)break;
                    p=p1;q=q1;
                    ch[p][q]=1;
                    D[p][q]=D[y][z]+t;
                }
            }
        }
    }
    int ans;
    for(int i=0;i<Q;i++)
    {
        ans=0;
        for(int j=1;j<=a;j++)
        {
            if(ch[j][0]&&D[j][0]==G[i])
            {
                ans++;
            }
        }
        answer(ans);
    }
}
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 1500 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 1500 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 1500 KB Output isn't correct
2 Halted 0 ms 0 KB -