BZOJ1574: [Usaco2009 Jan]地震损坏Damage

来源:互联网 发布:知柏地黄丸 多少钱 编辑:程序博客网 时间:2024/06/10 11:41

Description

农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1..P. C(1 <= C <= 100,000)条双向路经联接这些牛棚,编号为1..C. 路经i连接牛棚a_i和b_i (1 <= a_i<= P;1 <= b_i <= P).路经可能连接a_i到它自己,两个牛棚之间可能有多条路经.农庄在编号为1的牛棚. N (1 <= N <= P)头在不同牛棚的牛通过手机短信report_j(2 <= report_j <= P)告诉FJ它们的牛棚(report_j)没有损坏,但是它们无法通过路经和没有损坏的牛棚回到到农场. 当FJ接到所有短信之后,找出最小的不可能回到农庄的牛棚数目.这个数目包括损坏的牛棚. 注意:前50次提交将提供在一些测试数据上的运行结果.

Input

  • 第1行: 三个空格分开的数: P, C, 和 N

  • 第2..C+1行: 每行两个空格分开的数: a_i 和 b_i * 第C+2..C+N+1行: 每行一个数: report_j

Output

  • 第1行: 一个数,最少不能回到农庄的牛的数目(包括损坏的牛棚).

Sample Input

4 3 1

1 2

2 3

3 4

3

Sample Output

3

HINT

牛棚2遭到损坏,导致牛棚2, 3, 4里面的牛无法回到农庄.

题目传送门

话说刷水题的我是不是没救了~~~
这个牛棚的牛回不去,说明它周围的牛也回不去或者坏了
bfs即可

代码如下:

#include<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;struct node{    int x,y,next;}a[2100000];int len,last[2100000];void ins(int x,int y){    len++;    a[len].x=x;a[len].y=y;    a[len].next=last[x];last[x]=len;}int ans;bool v[2100000],b[2100000];void del(int x){    for(int k=last[x];k;k=a[k].next){        int y=a[k].y;        v[y]=0;    }}void dfs(int x){    b[x]=0;ans--;    for(int k=last[x];k;k=a[k].next){        int y=a[k].y;        if(v[y]==1&&b[y]==1)            dfs(y);    }}int main(){    int n,m,p;    len=0;memset(last,0,sizeof(last));    memset(v,1,sizeof(v));memset(b,1,sizeof(b));    scanf("%d%d%d",&n,&m,&p);ans=n;    for(int i=1;i<=m;i++){        int x,y;        scanf("%d%d",&x,&y);        ins(x,y);ins(y,x);    }    for(int i=1;i<=p;i++){        int x;        scanf("%d",&x);        del(x);    }    dfs(1);    printf("%d\n",ans);    return 0;}

by_lmy

阅读全文
0 0
原创粉丝点击