加判断中途退出

P1197 [JSOI2008] 星球大战

Miangoa @ 2023-07-17 19:16:41

#include<bits/stdc++.h>

using namespace std;

int n,m,k,sit[200001][2],fat[400001],del[400001],ans[400001];
bool bre[400001];

int find(int p) {
    if(fat[p]==p||bre[fat[p]])
        return p;
    else
        return fat[p]=find(fat[p]);
}

void read() {
    cin>>n>>m;
    for(int i=1; i<=m; i++)
        cin>>sit[i][0]>>sit[i][1];
    cin>>k;
    for(int i=1; i<=k; i++) {
        cout<<i<<' ';
        cin>>del[i];
        bre[del[i]]=true;
    }
}

int main() {
    read();
    for(int i=0; i<n; i++)
        fat[i]=i;
    for(int i=1; i<=m; i++)
        fat[find(sit[i][0])]=find(sit[i][1]);
    for(int i=k; i>=0; i--) {
        cout<<i<<' ';
        bre[del[i]]=false;
        for(int j=0; j<n; j++)
//          if(!bre[j]&&find(j)==j)
                ans[i]++;
    }
    for(int i=0; i<=k; i++)
        cout<<ans[i]<<endl;
}

|