Submission #145562

#TimeUsernameProblemLanguageResultExecution timeMemory
145562surface03문명 (KOI17_civilization)C++14
100 / 100
462 ms63032 KiB
#include<bits/stdc++.h> const int LM=2005; const int KLM=(int)1e5+1; int N,K,G[LM][LM],gCnt,group[KLM]; int ans, now; int fr,re; int dr[]={1,-1,0,0},dc[]={0,0,1,-1}; struct Civil{ int r,c,lev; }que[LM*LM]; void ffill(int r,int c){ if(G[r][c]>=0)return; G[r][c]=gCnt; que[re++]={r,c,0}; for(int k=0;k<4;k++){ ffill(r+dr[k],c+dc[k]); } } void input(){ scanf("%d%d",&N,&K); int i,j,r,c; for(i=0;i<K;i++){ scanf("%d%d",&r,&c); G[r][c]=-1; } for(i=1;i<=N;i++)for(j=1;j<=N;j++){ if(G[i][j]<0){ gCnt++; ffill(i,j); } } for(i=1;i<=gCnt;i++)group[i]=i; } int Find(int n){ if(n==group[n])return n; return group[n]=Find(group[n]); } int push(int r,int c,int lev){ if(r<1||r>N||c<1||c>N||G[r][c])return 0; G[r][c]=now; que[re++]={r,c,lev}; for(int k=0;k<4;k++){ int nr=r+dr[k],nc=c+dc[k]; if(nr<1||nr>N||nc<1||nc>N)continue; if(G[nr][nc]==0)continue; int next=Find(G[nr][nc]); if(now==next)continue; group[next]=now; gCnt--; } if(gCnt==1)ans=lev; return gCnt==1; } int BFS(){ if(gCnt==1)return ans; while(fr<re){ Civil&t=que[fr++]; now=Find(G[t.r][t.c]); for(int k=0;k<4;k++){ if(push(t.r+dr[k],t.c+dc[k],t.lev+1)){ return ans; } } } } int main(){ input(); printf("%d\n",BFS()); }

Compilation message (stderr)

civilization.cpp: In function 'void input()':
civilization.cpp:22:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&N,&K);
     ~~~~~^~~~~~~~~~~~~~
civilization.cpp:25:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d",&r,&c);
         ~~~~~^~~~~~~~~~~~~~
civilization.cpp: In function 'int BFS()':
civilization.cpp:67:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...