Submission

Status:
[PP-SSSSSSSSSSSS]

Score: 0

User: hmmm

Problemset: fireball

Language: cpp

Time: 0.003 second

Submitted On: 2025-04-06 10:28:11

#include<bits/stdc++.h>
using namespace std;
using pii=array<int,2>;
const int N=105;
int a[N][N],pa[11*N],sz[11*N];
vector<pii> p;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};

inline int find(int v){
    if(v==pa[v]) return v;
    return pa[v]=find(pa[v]);
}

inline void U(int u,int v){
    u=find(u);
    v=find(v);
    if(u!=v){
        if(sz[u]>sz[v]) swap(u,v);
        sz[u]+=sz[v];
        pa[v]=u;
    }
}

int main(){
    ios::sync_with_stdio(0); cin.tie(0);
    int n,m,k,ans=0;
    cin >> n >> m >> k;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin >> a[i][j];
            if(a[i][j]==1) ans++;
        }
    }
    for(int i=0;i<11*N;i++) pa[i]=i,sz[i]=1;;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==0) continue;
            for(int t=0;t<4;t++){
                int xx=i+dx[t];
                int yy=j+dy[t];
                if(a[xx][yy]==1){
                    U(i*m+j,xx*m+yy);
                }
            }
        }
    }

    while(k--){
        int u,v;
        cin >> u >> v;
        if(a[u][v]==0) cout << ans << "\n";
        else{
            if(find(u*m+v)!=find(0)){
                ans-=sz[find(u*m+v)];
                U(0,u*m+v);
            }
            cout << ans << "\n";
        }
    }
}