Submission #148009

#TimeUsernameProblemLanguageResultExecution timeMemory
148009arnold518문명 (KOI17_civilization)C++14
0 / 100
4 ms888 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 2000; const int MAXK = 1e5; const int dy[]={-1, 1, 0, 0}; const int dx[]={0, 0, -1, 1}; int N, K, A[MAXN+10][MAXN+10]; int conv(int y, int x) { return (y-1)*N+(x-1); } int par[MAXN*MAXN+10], col[MAXN*MAXN+10], cnt=0, ans; int Find(int x) { return x==par[x]?x:par[x]=Find(par[x]); } void Union(int x, int y) { x=Find(x); y=Find(y); par[x]=y; } void dfs(int y, int x) { int i, j; A[y][x]=1; for(i=0; i<4; i++) { int ny=y+dy[i], nx=x+dx[i]; if(!(1<=ny && ny<=N && 1<=nx && nx<=N)) continue; if(A[ny][nx]!=-1) continue; dfs(ny, nx); Union(conv(y, x), conv(ny, nx)); } } struct Queue { int y, x; }; queue<Queue> Q; int main() { int i, j, k; scanf("%d%d", &N, &K); for(i=0; i<N*N; i++) par[i]=i; for(i=1; i<=K; i++) { int y, x; scanf("%d%d", &y, &x); A[y][x]=-1; Q.push({y, x}); } for(i=1; i<=N; i++) for(j=1; j<=N; j++) { if(A[i][j]!=-1) continue; dfs(i, j); cnt++; } //for(i=1; i<=N; i++) { for(j=1; j<=N; j++) printf("%d ", A[i][j]); printf("\n"); } //printf("\n"); while(!Q.empty()) { int sz=Q.size(); ans++; while(sz--) { Queue T=Q.front(); Q.pop(); for(i=0; i<4; i++) { int ny=T.y+dy[i], nx=T.x+dx[i]; if(!(1<=ny && ny<=N && 1<=nx && nx<=N)) continue; if(Find(conv(ny, nx))==Find(conv(T.y, T.x))) continue; if(A[ny][nx]==0) { Union(conv(ny, nx), conv(T.y, T.x)); A[ny][nx]=1; Q.push({ny, nx}); } else { cnt--; Union(conv(ny, nx), conv(T.y, T.x)); } } } sz=Q.size(); while(sz--) { Queue T=Q.front(); Q.pop(); Q.push(T); for(i=0; i<4; i++) { int ny=T.y+dy[i], nx=T.x+dx[i]; if(!(1<=ny && ny<=N && 1<=nx && nx<=N)) continue; if(Find(conv(ny, nx))==Find(conv(T.y, T.x))) continue; if(A[ny][nx]!=0) { cnt--; Union(conv(ny, nx), conv(T.y, T.x)); } } } //for(i=1; i<=N; i++) { for(j=1; j<=N; j++) printf("%d ", A[i][j]); printf("\n"); } //printf("-> %d\n", cnt); if(cnt==1) return !printf("%d", ans); } }

Compilation message (stderr)

civilization.cpp: In function 'void dfs(int, int)':
civilization.cpp:28:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
civilization.cpp: In function 'int main()':
civilization.cpp:45:15: warning: unused variable 'k' [-Wunused-variable]
     int i, j, k;
               ^
civilization.cpp:47: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:52:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &y, &x);
         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...