P1574: [Usaco2009 Jan]地震损坏Damage
卧槽卧槽卧槽,这道水题竟然让我WA了两遍!!评测系统卡了然后手贱又提交了一次,然后就悲催了呜呜。。
把与不能回家但牛棚完好的牛相邻的牛棚赋值为不能走(false),可以证明,如果该牛回不了家,则周围一圈的牛要么牛棚坏了,要么也是一样回不了,所以结果就是,该牛周围的牛都回不了牛庄,所以是一道贪心题,最后来一遍bfs搜索有多少牛可以回去,总数一减就是答案了。
type
node=record
f,t:longint;
end;
var p,c,n,i,j,f,t,sum:longint;
head:array[..] of longint;
can:array[..] of boolean;
b:array[..] of node;
q:array[..] of longint;
procedure insert(m,f,t:longint);
begin
b[m].f:=head[f];
b[m].t:=t;
head[f]:=m;
end;
procedure delete(j:longint);
var nowe:longint;
begin
nowe:=head[j];
while nowe<> do
begin
can[b[nowe].t]:=false;
nowe:=b[nowe].f;
end;
end;
procedure bfs;
var l,r,now,nowe:longint;
begin
l:=; r:=; q[]:=; can[]:=false;
while l<=r do
begin
now:=q[l];
nowe:=head[now];
while nowe<> do
begin
if can[b[nowe].t] then begin
//writeln(b[nowe].t);
can[b[nowe].t]:=false;
inc(r);
//inc(sum);
q[r]:=b[nowe].t;
end;
nowe:=b[nowe].f;
end;
inc(l);
end;
sum:=r;
end;
begin
readln(p,c,n);
fillchar(can,sizeof(can),true);
for i:= to c do
begin
readln(f,t);
if f=t then continue;
insert(*i-,f,t);
insert(*i,t,f);
end;
for i:= to n do
begin
readln(j);
can[j]:=false;
delete(j);
end;
bfs;
writeln(p-sum);
end.
type
node=record
f,t:longint;
end;
var p,c,n,i,j,f,t,sum:longint;
head:array[..] of longint;
can:array[..] of boolean;
b:array[..] of node;
q:array[..] of longint;
procedure insert(m,f,t:longint);
begin
b[m].f:=head[f];
b[m].t:=t;
head[f]:=m;
end;
procedure delete(j:longint);
var nowe:longint;
begin
nowe:=head[j];
while nowe<> do
begin
can[b[nowe].t]:=false;
nowe:=b[nowe].f;
end;
end;
procedure bfs;
var l,r,now,nowe:longint;
begin
l:=; r:=; q[]:=; can[]:=false;//sum:=1;
while l<=r do
begin
now:=q[l];
nowe:=head[now];
while nowe<> do
begin
//if (b[nowe].t=4) and (can[b[nowe].t]) then writeln('sb');
if can[b[nowe].t] then begin
//writeln(b[nowe].t);
can[b[nowe].t]:=false;
inc(r);
//inc(sum);
q[r]:=b[nowe].t;
end;
nowe:=b[nowe].f;
end;
inc(l);
end;
sum:=r;
end;
begin
readln(p,c,n);
fillchar(can,sizeof(can),true);
for i:= to c do
begin
readln(f,t);
if f=t then continue;
insert(*i-,f,t);
insert(*i,t,f);
end;
for i:= to n do
begin
readln(j);
can[j]:=false;
delete(j);
end;
//for i:=1 to p do
//if can[i] then writeln('t')
//else writeln('f');
bfs;
writeln(p-sum);
end.
(转载请注明出处:http://www.cnblogs.com/Kalenda/)
P1574: [Usaco2009 Jan]地震损坏Damage的更多相关文章
- 1574: [Usaco2009 Jan]地震损坏Damage
1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 425 Solved: 232[Subm ...
- BZOJ 1574: [Usaco2009 Jan]地震损坏Damage
Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1.. ...
- [BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)
传送门 告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点 那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的. #include <cstdio> #inc ...
- 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage
[算法]搜索 [题意]给定无向图,现在可能有一些点已经被删除,只给出信息是c个点不能到达结点1,求最少的不能到达结点1的个数(含已删除点). [题解] 真是一道奥妙重重的题目. 每个点不能到达结点1, ...
- bzoj1574 [Usaco2009 Jan]地震损坏Damage
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1574 [题解] 贪心把report的点的旁边所有点破坏即可. # include <s ...
- bzoj 1574: [Usaco2009 Jan]地震损坏Damage【dfs】
和March的那道不一样,只是非常单纯的带着贪心的dfs 首先一个点被隔断,与它相邻的所有点也会被隔断,打上删除标记,从1dfs即可 #include<iostream> #include ...
- [bzoj1574][Usaco2009 Jan]地震损坏Damage_dfs
地震损坏Damage bzoj-1574 Usaco-2009 Jan 题目大意:题目链接. 注释:略. 想法: 显然对于每一个report点,和它直接相连的点都不可能到达1.我们将它打上标记. 然后 ...
- bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分
1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec Memory Limit: 64 MB Submit: 665 Solved: 227[Sub ...
- BZOJ3396: [Usaco2009 Jan]Total flow 水流
3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 45 Solved: 27[Sub ...
随机推荐
- Cent OS 6 主机名设置
1:查看主机名: #hostname 2:修改主机名: #vi /etc/sysconfig/network ETWORKING=yes HOSTNAME=superboy.com 3:重启生效: # ...
- 004远程登录Linux系统
通过windows主机远程登录Linux主机 前提一:从windows能ping通Linux 前提二:关闭Linux防火墙,运行命令:/etc/init.d/iptables stop (1)使用Pu ...
- Android IOS WebRTC 音视频开发总结(十六)-- 音频设备操作之opensl与jni
本节主要分享视频通话中android和ios上操作音频设备的方式,如调解音量大小,启用扬声器(本系列文章转载请说明出处,博客园RTC.Blacker). 先看看webrtc中处理音频设备代码的目录结构 ...
- 误删ext3的恢复方法
1.Ext3文件系统结构的简单介绍在Linux所 用的Ext3文件系统中,文件是以块为单位存储的,默认情况下每个块的大小是1K,不同的块以块号区分.每个文件还有一个节点,节点中包含有文件所有者, 读写 ...
- 使用buildroot编译bind DNS服务器
用buildroot来制作文件系统很方便,编译出来的文件系统是直接可用的,不用添加脚本等麻烦的工作,很多的库和app都可以直接添加到文件系统里边,如常用的udhcpc,tftp,apache,ligh ...
- php中使用end方法报错
<b>Strict Standards</b>: Only variables should be passed by reference in <b> 1.如果 ...
- wpf仿QQ之窗体翻转
很久以前在网上找过窗体翻转的Demo,但看得不是很明白,大多是内容的翻转,研究了下,现在分享给大家. 利用UIElement.RenderTransform 属性就能实现元素的呈现位置的转换,因此只需 ...
- 自定义控件winfrom
附件代码:http://files.cnblogs.com/files/qtiger/CompositeControl.zip 转载:http://www.cnblogs.com/bomo/archi ...
- C#中如何将combox中的下拉项和一个枚举中的各项进行绑定
实现一个combobox,将其各个下拉项与枚举进行绑定 效果图如下: 代码详解如下: 枚举: public enum StoreSite { /// <summary> /// 未知 // ...
- Eruda——手机网页前端调试面板
前言 进行移动端网页开发时,想要查看手机浏览器信息从来都不是一件容易的事.特别是当目标环境为APP内置WebView,需要调用特定的JsBridge接口时,你根本都干不了什么,只能一遍又一遍地修改代码 ...