洛谷P2932 [USACO09JAN]地震造成的破坏Earthquake Damage
dfs染色
#include <bits/stdc++.h> #define For(i,j,k) for(int i=j;i<=k;i++) #define Dow(i,j,k) for(int i=j;i>=k;i--) #define LL long long using namespace std ; const int N = 30011 , M = 100011 ; struct node{ int to,pre ; }e[M*2]; int n,m,K,x,cnt,ans ; int head[N],fa[N] ; bool visit[N] ; inline int read() { int x = 0 , f = 1 ; char ch = getchar() ; while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar() ; } while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar() ; } return x * f ; } inline void add(int x,int y) { e[++cnt].to = y ; e[cnt].pre = head[x] ; head[x] = cnt ; } inline void del(int u) { for(int i=head[u];i;i=e[i].pre) visit[e[i].to]=1 ; } inline void dfs(int u) { if(visit[u]) return ; visit[u]=1 ; ans-- ; for(int i=head[u];i;i=e[i].pre) dfs(e[i].to) ; } int main() { n = read() ; m = read() ; K = read() ; For(i,1,m) { int x,y ; x = read() ; y = read() ; add(x,y) ; add(y,x) ; } For(i,1,K) del(read()) ; ans = n ; dfs(1) ; printf("%d ",ans) ; return 0 ; }