【USACO 2009 JAN】地震造成的破坏Earthquake Damage(DFS)

题目描述

农夫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接到所有短信之后,找出最小的不可能回到农庄的牛棚数目。这个数目包括损坏的牛棚。

输入

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

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

输出

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

一个点如果无法到达,也就是说与它相连的所有点都无法到达,那么我们只需要将所有发短信的奶牛的农场标记一下即可。搜索时记录访问到的点,无法到达的点就是不可能回到农庄的牛棚和被破坏的牛棚。

 1 #include <cstdio>
 2 #include <vector>
 3
 4 #define N 30001
 5
 6 int p,c,n,a,b,r,ans;
 7 bool vis[N];
 8 std::vector<int> g[N];
 9
10 void dfs(int u){
11     ++ans;
12     vis[u]=true;
13     for(int i=0;i<g[u].size();++i){
14         int v=g[u][i];
15         if(vis[v])continue;
16         dfs(v);
17     }
18 }
19
20 int main(void){
21     scanf("%d%d%d",&p,&c,&n);
22     for(int i=1;i<=c;++i){
23         scanf("%d%d",&a,&b);
24         g[a].push_back(b);
25         g[b].push_back(a);
26     }
27     for(int i=1;i<=n;++i){
28         scanf("%d",&r);
29         for(int i=0;i<g[r].size();++i){
30             int v=g[r][i];
31             vis[v]=true;
32         }
33     }
34     dfs(1);
35     printf("%d",p-ans);
36 }

原文地址:https://www.cnblogs.com/gzh01/p/9385256.html

时间: 2024-10-23 08:15:19

【USACO 2009 JAN】地震造成的破坏Earthquake Damage(DFS)的相关文章

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

题目描述 Wisconsin has had an earthquake that has struck Farmer John's farm! The earthquake has damaged some of the pastures so that they are unpassable. Remarkably, none of the cowpaths was damaged. As usual, the farm is modeled as a set of P (1 <= P <

bzoj 1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害

1585: [Usaco2009 Mar]Earthquake Damage 2 地震伤害 Description Farmer John的农场里有P个牧场,有C条无向道路连接着他们,第i条道路连接着两个牧场Ai和Bi,注意可能有很多条道路连接着相同的Ai和Bi,并且Ai有可能和Bi相等.Farmer John在1号牧场里.由于地震,某些牧场被损坏,但由于信春哥,C条道路没有一条损坏.有N头奶牛,他们在不同的牧场里,于是N <= P.他们一一向Farmer John报告.第i头奶牛报告给Farm

USACO翻译:USACO 2012 JAN三题(1)

USACO 2012 JAN(题目一) 一.题目概览 中文题目名称 礼物 配送路线 游戏组合技 英文题目名称 gifts delivery combos 可执行文件名 gifts delivery combos 输入文件名 gifts.in delivery.in combos.in 输出文件名 gifts.out delivery.out combos.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比

USACO翻译:USACO 2013 JAN三题(1)

USACO 2013 JAN 一.题目概览 中文题目名称 镜子 栅栏油漆 奶牛排队 英文题目名称 mirrors paint lineup 可执行文件名 mirrors paint lineup 输入文件名 mirrors.in paint.in lineup.in 输出文件名 mirrors.out paint.out lineup.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方式 全文比较 全文比较 全文比较 二.运行内存限制

USACO翻译:USACO 2014 JAN三题(2)

USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recording skicourse 输入文件名 bteams.in recording.in skicourse.in 输出文件名 bteams.out recording.out skicourse.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比

USACO翻译:USACO 2012 JAN三题(2)

USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛跑步 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking baleshare cowrun 输入文件名 stacking.in baleshare.in cowrun.in 输出文件名 stacking.out baleshare.out cowrun.out 每个测试点时限 1秒 1秒 1秒 测试点数目 10 10 10 每个测试点分值 10 10 10 比较方

1574: [Usaco2009 Jan]地震损坏Damage

1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 232[Submit][Status][Discuss] Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1..P. C(1 <= C <= 100,000)条双向路经

[USACO 2001 OPEN]地震 (二分答案+最小生成树)

题面:[USACO 2001 OPEN]地震 \(solution:\) \(code:\) #include<iostream> #include<cstdio> #include<iomanip> #include<algorithm> #include<cstring> #include<cstdlib> #include<ctime> #include<cmath> #include<vector

【题解】晋升者计数 Promotion Counting [USACO 17 JAN] [P3605]

[题解]晋升者计数 Promotion Counting [USACO 17 JAN] [P3605] 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训.!牛是可怕的管理者! [题目描述] 奶牛从 \(1\) ~ \(N(1≤N≤1e5)\) 进行了编号,把公司组织成一棵树,\(1\)号奶牛作为总裁(树的根节点).除总裁以外的每头奶牛都有且仅有唯一的一个的上司(即它在树上的父结点).每一头牛\(i\)都有一个不同的能力指数 \(p(i)\),描述了她对其工作的擅长程度.如果奶牛