BZOJ 1574: [Usaco2009 Jan]地震损坏Damage

看懂题之后乱搜就好。。。

#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;
}


你可能感兴趣的:(BZOJ 1574: [Usaco2009 Jan]地震损坏Damage)