Submission #109314

#TimeUsernameProblemLanguageResultExecution timeMemory
109314aer0park문명 (KOI17_civilization)C++14
54 / 100
1069 ms52140 KiB
#include <bits/stdc++.h> #define f first #define s second using namespace std; typedef int ll; typedef pair<ll,ll> pi; ll n,k,p[4000004],transp[2004][2004],cnt,coj,anw,vis[4000004]; bool ck[4000004]; ll dx[]={1,0,-1,0},dy[]={0,1,0,-1}; vector<pi> ar; queue<pi> q; ll par(int a) { if(p[a]==a) return a; return p[a]=par(p[a]); } bool merge(ll a,ll b) { a=par(a),b=par(b); if(a!=b) { p[a]=b; return 1; } return 0; } int main() { scanf("%d%d",&n,&k); for(int i=0;i<k;i++) { ll a,b;scanf("%d%d",&a,&b); ar.push_back({a,b}); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) transp[i][j]=++cnt; for(int i=1;i<=n*n;i++) p[i]=i,vis[i]=-1; for(int i=0;i<k;i++) { q.push(ar[i]); vis[transp[ar[i].f][ar[i].s]]=0; } while(1) { while(!q.empty()) { ll nwx=q.front().f,nwy=q.front().s; if(vis[transp[nwx][nwy]]!=anw) break; q.pop(); coj++; for(int i=0;i<4;i++) { ll ntx=nwx+dx[i],nty=nwy+dy[i]; if(ntx<1||ntx>n||nty<1||nty>n) continue; if(vis[transp[ntx][nty]]==-1) q.push({ntx,nty}),vis[transp[ntx][nty]]=anw+1; else if(vis[transp[ntx][nty]]<=anw) { if(merge(transp[nwx][nwy],transp[ntx][nty])) coj--; } } } if(coj==1) { printf("%d",anw); break; } anw++; } return 0; }

Compilation message (stderr)

civilization.cpp: In function 'int main()':
civilization.cpp:36: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:39:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         ll a,b;scanf("%d%d",&a,&b);
                ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...