Submission #124474

#TimeUsernameProblemLanguageResultExecution timeMemory
124474DJ035문명 (KOI17_civilization)C++14
100 / 100
892 ms40068 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,par[101010],sz[101010],chk[2020][2020],day[2020][2020],dx[4]={0,0,1,-1},dy[4]={-1,1,0,0},cnt,a,b;
queue<int> qx,qy;
int f(int a){
    if(a==par[a]) return a;
    return par[a]=f(par[a]);
}
void uni(int a,int b){
    if(sz[a]>=sz[b]) par[b]=a,sz[a]+=sz[b];
    else par[a]=b,sz[b]+=sz[a];
}
main(){
    cin >> n >> m;
    for(int i=1;i<=m;i++){
        cin >> a >> b;
        par[i]=chk[a][b]=i;
        qx.push(a),qy.push(b);
    }
    if(m==1){cout << 0;return 0;}
    while(!qx.empty()){
        int x=qx.front(),y=qy.front();
        qx.pop(),qy.pop();
        for(int i=0;i<4;i++){
            int xx=x+dx[i],yy=y+dy[i];
            if(xx<1 || yy<1 || xx>n || yy>n) continue;
            if(chk[xx][yy]){
                if(day[xx][yy] <= day[x][y] && f(chk[x][y]) != f(chk[xx][yy])){
                    uni(f(chk[x][y]),f(chk[xx][yy]));
                    cnt++;
                    if(cnt == m-1){cout << day[x][y];return 0;}
                }
                continue;
            }
            qx.push(xx),qy.push(yy);
            chk[xx][yy]=chk[x][y];
            day[xx][yy]=day[x][y]+1;
        }
    }
}

Compilation message (stderr)

civilization.cpp:14:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(){
      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...