답안 #791947

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
791947 2023-07-24T12:54:39 Z Amylopectin Star Trek (CEOI20_startrek) C++14
0 / 100
34 ms 48044 KB
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <stdlib.h>
// #pragma GCC optimize("O3,unroll-loops")
using namespace std;
const long long mxn = 1e6 + 10,mo = 1e9 + 7;
struct we
{
    long long to,val[2][2],cur[2],num,ft;
    we()
    {
        to = 0;
        val[0][0] = -1;
        val[0][1] = -1;
        val[1][0] = -1;
        val[1][1] = -1;
        cur[0] = -1;
        cur[1] = -1;
        num = 0;
        ft = -1;
    }
    we(long long cn,long long cnu,long long cft)
    {
        to = cn;
        val[0][0] = -1;
        val[0][1] = -1;
        val[1][0] = -1;
        val[1][1] = -1;
        cur[0] = -1;
        cur[1] = -1;
        num = cnu;
        ft = cft;
    }
};

vector<struct we> pat[mxn] = {};
long long pid[mxn][2] = {},rwol,stt[mxn][2][3] = {},cou = 0,u[mxn] = {};
long long re(long long cn,long long cidx,long long be,long long wh)
{
    long long i,j,fn,fm,ccur = -1,cva0 = 0,fidx,wop = (wh+1)&1,fcur,fva0,cva1 = 0,fva1;
    if(cidx != -1)
    {
        if(pat[cn][cidx].cur[wh] != -1)
        {
            return 0;
        }
    }
    if(u[cn] == 1)
    {
        i = i;
        exit(1);
    }
    u[cn] = 1;
    for(i=0; i<pat[cn].size(); i++)
    {
        fn = pat[cn][i].to;

        if(i == cidx || fn == be)
        {
            continue;
        }
        fidx = pid[pat[cn][i].num][(pat[cn][i].ft + 1)&1];
        if(fidx == -1)
        {
            exit(1);
        }
        re(fn,fidx,cn,wop);
        fcur = pat[fn][fidx].cur[wop];
        fva0 = pat[fn][fidx].val[wop][0];
        fva1 = pat[fn][fidx].val[wop][1];
        if(wh == 0)
        {
            if(ccur == -1)
            {
                ccur = fcur;
                if(ccur < 2)
                {
                    cva0 = fva0;
                    cva1 = fva1;
                }
            }
            else 
            {
                if(fcur == 0)
                {
                    if(ccur != 0)
                    {
                        cva0 = fva0;
                        cva1 = 0;
                    }
                    else
                    {
                        cva0 = 0;
                    }
                    ccur = 0;
                    
                }
                else if(fcur == 1)
                {
                    if(ccur == 0)
                    {
                        // cva0 += fva0;
                        // cva += fva;
                    }
                    else if(ccur == 1)
                    {
                        cva1 += fva1;
                        cva0 = 0;
                    }
                    else 
                    {
                        ccur = 1;
                        cva1 += fva1;
                        cva0 = 0;
                    }
                }
            }
        }
        else 
        {
            if(ccur == -1)
            {
                ccur = fcur;
                if(ccur == 2)
                {
                    ccur = 1;
                }
                // if(ccur < 2)
                // {
                    // cva = fva;
                cva0 = fva0;
                cva1 = fva1;
                // }
            }
            else 
            {
                if(ccur == 0)
                {
                    if(fcur == 0)
                    {
                        cva0 += fva0;
                    }
                    else if(fcur == 1)
                    {
                        ccur = 1;
                        cva0 = fva0;
                        cva1 = fva1;
                    }
                    else 
                    {
                        cva0 = fva0;
                        cva1 = fva1;
                        ccur = 1;
                    }
                }
                else if(ccur == 1)
                {
                    if(fcur >= 1)
                    {
                        cva0 = 0;
                        cva1 = 0;
                        ccur = 2;
                    }
                }
            }
        }
    }
    if(wh == 0)
    {
        if(ccur == -1)
        {
            ccur = 1;
            cva1 = 1;
            cva0 = 0;
        }
        else if(ccur == 0)
        {
            // cva ++;
        }
        else if(ccur >= 1)
        {
            ccur = 1;
            cva1 ++;
        }
    }
    else 
    {
        if(ccur == -1)
        {
            ccur = 0;
            cva0 = 1;
        }
        else if(ccur == 0)
        {
            cva0 ++;
        }
    }
    if(cidx == -1)
    {
        stt[cn][wh][0] = cva0;
        stt[cn][wh][1] = cva1;
        stt[cn][wh][2] = ccur;
    }
    else 
    {
        if(ccur == -1)
        {
            exit(1);
        }
        pat[cn][cidx].cur[wh] = ccur;
        pat[cn][cidx].val[wh][0] = cva0;
        pat[cn][cidx].val[wh][1] = cva1;
    }
    cou ++;
    u[cn] = 0;
    if(cou > 600000)
    {
        exit(1);
    }
    return 0;
}
int main()
{
    freopen("input19.txt","r",stdin);
    long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
    scanf("%lld %lld",&n,&m);
    for(i=1; i<n; i++)
    {
        scanf("%lld %lld",&cn,&cm);
        pid[i][0] = pat[cn].size();
        pid[i][1] = pat[cm].size();
        pat[cn].emplace_back(cm,i,0);
        pat[cm].emplace_back(cn,i,1);
        // pat[cn].push_back({cm,{{-1,-1},{-1,-1}},{-1,-1},i,0});
        // pat[cm].push_back({cn,{{-1,-1},{-1,-1}},{-1,-1},i,1});
    }
    uw = 0;
    cva0 = 0;
    cva1 = 0;
    for(i=1; i<=n; i++)
    {
        re(i,-1,-1,0);
        re(i,-1,-1,1);
        if(stt[i][0][2] == 0)
        {
            cva0 ++;
        }
        if(stt[i][1][2] == 0)
        {
            cva1 ++;
        }
    }
    ans = 0;
    if(stt[1][0][2] == 0)
    {
        ans = ((n - stt[1][0][0] - stt[1][0][1]) * n) % mo;
    }
    ans += stt[1][0][0] * cva0 + stt[1][0][1] * cva1;
    ans %= mo;
    printf("%lld\n",ans);
    return 0;
}

Compilation message

startrek.cpp: In function 'long long int re(long long int, long long int, long long int, long long int)':
startrek.cpp:57:15: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<we>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(i=0; i<pat[cn].size(); i++)
      |              ~^~~~~~~~~~~~~~~
startrek.cpp:43:17: warning: unused variable 'j' [-Wunused-variable]
   43 |     long long i,j,fn,fm,ccur = -1,cva0 = 0,fidx,wop = (wh+1)&1,fcur,fva0,cva1 = 0,fva1;
      |                 ^
startrek.cpp:43:22: warning: unused variable 'fm' [-Wunused-variable]
   43 |     long long i,j,fn,fm,ccur = -1,cva0 = 0,fidx,wop = (wh+1)&1,fcur,fva0,cva1 = 0,fva1;
      |                      ^~
startrek.cpp: In function 'int main()':
startrek.cpp:228:17: warning: unused variable 'j' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                 ^
startrek.cpp:228:29: warning: unused variable 'fn' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                             ^~
startrek.cpp:228:32: warning: unused variable 'fm' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                ^~
startrek.cpp:228:35: warning: unused variable 'cl' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                   ^~
startrek.cpp:228:38: warning: unused variable 'cr' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                      ^~
startrek.cpp:228:41: warning: unused variable 'su' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                         ^~
startrek.cpp:228:44: warning: unused variable 'cen' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                            ^~~
startrek.cpp:228:58: warning: unused variable 'ccur' [-Wunused-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                                          ^~~~
startrek.cpp:228:63: warning: variable 'uw' set but not used [-Wunused-but-set-variable]
  228 |     long long i,j,n,m,cn,cm,fn,fm,cl,cr,su,cen,cva0,cva1,ccur,uw,ans;
      |                                                               ^~
startrek.cpp:227:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  227 |     freopen("input19.txt","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
startrek.cpp:229:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  229 |     scanf("%lld %lld",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
startrek.cpp:232:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  232 |         scanf("%lld %lld",&cn,&cm);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 34 ms 47956 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 33 ms 48044 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 33 ms 47960 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 33 ms 47960 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 33 ms 47960 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 33 ms 47960 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 33 ms 47960 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 34 ms 47956 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -