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

本文提供了一道经典的USACO Gold级别题目“地震损坏”的解题思路及C++实现代码。该问题关注如何计算地震后无法通过未受损路径返回农庄的牛棚数量,采用贪心算法结合深度优先搜索来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1574: [Usaco2009 Jan]地震损坏Damage

Time Limit: 10 Sec   Memory Limit: 64 MB
Submit: 689   Solved: 389
[ Submit][ Status][ Discuss]

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里面的牛无法回到农庄.

Source


其实是一道很简单的贪心

直接看这个博客就可以了

讲的很清楚

有一个常见的套路

无向图中求有多少个点能到达1其实就是求1能到达多少个点

#include<cstdio>
#include<cstring>
const int N=30007,M=100006;
struct node
{
	int to,next;
}e[M*2];
int first[N],cnt;
void insert(int u,int v)
{
	e[++cnt]=(node){v,first[u]};first[u]=cnt;
	e[++cnt]=(node){u,first[v]};first[v]=cnt;
}
bool a[N],visit[N];
int sum=0;
void dfs(int x)
{
	visit[x]=1;sum++;
	for(int k=first[x];k;k=e[k].next)
	if(!a[e[k].to]&&!visit[e[k].to])	dfs(e[k].to);
}
int read()
{
	int ans=0;char t=getchar();
	while(t<'0'||t>'9')	t=getchar();
	while(t>='0'&&t<='9')	ans=ans*10+t-'0',t=getchar();
	return ans;
}
int main()
{
	int p,c,n;
	scanf("%d %d %d",&p,&c,&n);
	int u,v;
	for(int i=1;i<=c;i++)	u=read(),v=read(),insert(u,v);
	for(int i=1;i<=n;i++)	
	{
		a[u=read()]=1;
		for(int k=first[u];k;k=e[k].next)
		if(!a[e[k].to])	a[e[k].to]=1;
	}
	dfs(1);
	printf("%d\n",p-sum);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值