洛谷P2932 [USACO09JAN]地震造成的破坏Earthquake Damage

洛谷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 ; 
}
原文地址:https://www.cnblogs.com/third2333/p/7637433.html