卧槽卧槽卧槽,这道水题竟然让我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的更多相关文章

  1. 1574: [Usaco2009 Jan]地震损坏Damage

    1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 232[Subm ...

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

    Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1.. ...

  3. [BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)

    传送门 告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点 那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的. #include <cstdio> #inc ...

  4. 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage

    [算法]搜索 [题意]给定无向图,现在可能有一些点已经被删除,只给出信息是c个点不能到达结点1,求最少的不能到达结点1的个数(含已删除点). [题解] 真是一道奥妙重重的题目. 每个点不能到达结点1, ...

  5. bzoj1574 [Usaco2009 Jan]地震损坏Damage

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1574 [题解] 贪心把report的点的旁边所有点破坏即可. # include <s ...

  6. bzoj 1574: [Usaco2009 Jan]地震损坏Damage【dfs】

    和March的那道不一样,只是非常单纯的带着贪心的dfs 首先一个点被隔断,与它相邻的所有点也会被隔断,打上删除标记,从1dfs即可 #include<iostream> #include ...

  7. [bzoj1574][Usaco2009 Jan]地震损坏Damage_dfs

    地震损坏Damage bzoj-1574 Usaco-2009 Jan 题目大意:题目链接. 注释:略. 想法: 显然对于每一个report点,和它直接相连的点都不可能到达1.我们将它打上标记. 然后 ...

  8. bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分

    1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 665  Solved: 227[Sub ...

  9. BZOJ3396: [Usaco2009 Jan]Total flow 水流

    3396: [Usaco2009 Jan]Total flow 水流 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 45  Solved: 27[Sub ...

随机推荐

  1. IE 下的z-index BUG问题

    今天做项目的时候在IE7 碰到了IE 的 z-index 问题: 然后问了几个朋友,总结了一下z-index问题的几个要点: 1.z-index 是要在position为relative或者absol ...

  2. hadoop 根据SecondaryNameNode恢复Namenode

    1.修改conf/core-site.xml 增加 <property> <name>fs.checkpoint.period</name> <value&g ...

  3. SpringMVC序列化Long转成String

    问题:由于JS中Number的精度为16位(最大位17位,第17位精度不准),我们的ID用的Number 18位,传到客户端会丢失最后两位: 解决方式:Long序列化成String,传到客户端: 注意 ...

  4. Android IOS WebRTC 音视频开发总结(十四)-- sip和xmpp异同

    这篇文章主要介绍XMPP与SIP,很多人容易混淆这两个概念,转载请说明出处(博客园RTC.Blacker). 简介:XMPP和SIP都是应用层协议,主要用于互联网上发送语音和即时通讯. SIP在RFC ...

  5. PHP 统计中文字符串的长度

    中文网站一般会选择两种编码:gbk/gb2312或是utf-8. gbk编码下每个中文字符所占字节为2,例: $zhStr = ‘您好,中国!’; echo strlen($zhStr); // 输出 ...

  6. 在MFC程序中使用AnyCAD图形控件

    AnyCAD图形控件有.Net版本和C++两个版本,使用C++要比C#稍微繁杂一点.SDK中提供了针对MFC的文档视图的封装,只需改一下几个基类即可. 准备 VS2010 下载C++版本的AnyCAD ...

  7. IPHONE 字体加粗

    UIFONT 没有字体加精参数,但可以修发,字体名,达到加粗的效果正常:Helvetica加粗"Helvetica-Bold""TimesNewRomanPS-BoldM ...

  8. 代码分享:php对二维数组进行排序

    发布:net/PHP编程  编辑:thebaby   2013-06-28 13:12:54  [大 中 小] 转自:http://www.jbxue.com/article/9991.html本文介 ...

  9. 【转】在delphi中实现控件的拖拽

    提示:可以添加一个布尔来控制可否拖动的状态,这里提供所有都能拖动的方法. procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseB ...

  10. ruby 程序中的文字编码

    1,问题 在写一个统计代码行数的脚本时遇到一个问题: 代码: file_name = "code.rb"c = 0File.foreach(file_name) do |x| ne ...