蒟蒻求调,题解看不懂/dk
// Problem: E - Blackout 2
// Contest: AtCoder - freee Programming Contest 2022(AtCoder Beginner Contest 264)
// URL: https://atcoder.jp/contests/abc264/tasks/abc264_e
// Memory Limit: 1024 MB
// Time Limit: 3000 ms
#include<iostream>
#include<cstdio>
using namespace std;
const int N=2e5+5;
int fa[N];
int siz[N];
int find(int x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
int n,m,e,cnt;
void add(int u,int v){
// cout<<"enter"<<u<<' '<<v<<endl;
int fu=find(u),fv=find(v);
if(fu==fv) return ;
if(fu>fv) swap(fu,fv);
fa[fu]=fv;
if(fv==n+1) cnt+=siz[fu];
siz[fv]+=siz[fu];
// for(int i=1;i<=n+1;i++) printf("%d%c",fa[i]," \n"[i==n+1]);
}
struct node{
int u,v;
}a[N];
bool vis[N];
int q;
int b[N];
int ans[N];
int main()
{
scanf("%d%d%d",&n,&m,&e);
for(int i=1;i<=n+1;i++) fa[i]=i,siz[i]=1;
for(int i=1;i<=e;i++){
scanf("%d%d",&a[i].u,&a[i].v);
if(a[i].u>n) a[i].u=n+1;
if(a[i].v>n) a[i].v=n+1;
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
scanf("%d",&b[i]);
vis[b[i]]=1;
}
for(int i=1;i<=e;i++)
if(!vis[i]) add(a[i].u,a[i].v);
ans[q]=cnt;
for(int i=q;i>=2;i--){
add(a[b[i]].u,a[b[i]].v);
ans[i-1]=cnt;
}
for(int i=1;i<=q;i++)
printf("%d\n",ans[i]);
}