Submission #658

#TimeUsernameProblemLanguageResultExecution timeMemory
658pl0892029지도 색칠하기 (GA3_map)C++98
0 / 120
0 ms920 KiB
#include <algorithm>
using namespace std;

typedef struct edge
{
    int u,v;
}edge;

bool cmp(edge a,edge b){return a.u==b.u ? a.v<b.v : a.u<b.u;}

edge arr[400];
int table[400], n;
int chk[21], cnt[21], queue[21], h,t;

long long NumberOfMaps(int N,int M,int *A,int *B)
{
    int i,j,m;
    long long ret = 1, tmp = 1;
    for(i=0;i<M;i++)
    {
        arr[2*i].u=A[i],arr[2*i].v=B[i];
        arr[2*i+1].u=B[i], arr[2*i+1].v=A[i];
    }
    n=2*M;
    sort(arr,arr+n,cmp);
    for(i=1;i<n;i++) if(arr[i-1].u==arr[i].u && arr[i-1].v==arr[i].v) table[i]=1;
    for(i=1;i<=N;i++)
    {
        if( chk[i]==2 ) continue;
        tmp = 1, h=0, t=0;
        queue[t++]=i, chk[i]=1;
        while(h<t)
        {
            m=queue[h++];
            chk[m]=2; // finish
            tmp *= 4-cnt[m];
            for(j=0;j<n;j++)
            {
                if(table[j]==1) continue;
                if(arr[j].u==m)
                {
                    if(chk[arr[j].v]<2) cnt[arr[j].v]++;
                    if(chk[arr[j].v]==0)
                    {
                        queue[t++]=arr[j].v;
                        chk[arr[j].v]=1;
                    }
                }
            }
        }
        ret *= tmp;
    }
    return ret;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...