看懂题之后乱搜就好。。。
#include<map> #include<cmath> #include<queue> #include<cstdio> #include<vector> #include<cstdlib> #include<cstring> #include<algorithm> #define inf 1000000000 #define me(a,x) memset(a,x,sizeof a) #define cp(a,x) memcpy(a,x,sizeof a) using namespace std; typedef long long LL; const int N=30010,M=100010; struct node{int y,next;}a[M<<1]; int len,first[N]; void ins(int x,int y) { a[++len].y=y,a[len].next=first[x],first[x]=len; } bool v[N],b[N]; int ans; void dfs(int x) { b[x]=1,ans--; for(int k=first[x];k;k=a[k].next) { int y=a[k].y; if(!v[y] && !b[y]) dfs(y); } } void del(int x){for(x=first[x];x;x=a[x].next)v[a[x].y]=1;} int main() { int n,m,p,x,y,i; scanf("%d%d%d",&n,&m,&p); ans=n; for(i=1;i<=m;i++) scanf("%d%d",&x,&y),ins(x,y),ins(y,x); for(i=1;i<=p;i++) scanf("%d",&x),del(x); dfs(1); printf("%d\n",ans); return 0; }