卧槽卧槽卧槽,这道水题竟然让我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. Jsp servlet 值传递。。

    先新建一个动态WEB项目. 展开WebRoot/index.jsp 1 <%@ page language="java" import="java.util.*&q ...

  2. 关于java classpath问题

    在配置java环境的时候,有一个classpath,这是jre寻找.class文件的路径.一般会设置为当前路径".;%JAVA_HOME%\lib;",前面的.为当前路径 如果没有 ...

  3. webstorm & phpstorm破解

    webstorm: http://idea.qinxi1992.cn/ http://idea.goxz.gq http://v2mc.net:1017 http://idea.imsxm.com h ...

  4. js控制ul的显示隐藏,对象的有效范围

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. su:认证失败

    使用命令[su - root]切换用户,提示[su:认证失败] 原因:Ubuntu安装之后,root用户默认是被锁定的,不允许登录,也不允许su到root. 解决:重新设置密码 在终端输入命令:sud ...

  6. Linux下对于inode的理解

    0x01 什么是inode 文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector),每个扇区储存512字节: 操作系统读取硬盘时,不会一个个扇区地读取,这样效率低,而是一次性连续读取多个扇区 ...

  7. PHP 按二维数组的键值排序

    /** * 按二维数组的键值排序 * @param unknown $array 二维数组 * @param unknown $key 二维数组的键值 * @param string $order 升 ...

  8. SQL 常用方法

    EXCEPT :返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值). INTERSECT :返回 两个结果集的交集(即两个查询都返回的所有非重复值). UNION :返回两个结果集的并 ...

  9. 使用C#三维图形控件进行曲线曲面分析

    使用AnyCAD.Net三维图图形控件能够计算曲线的切线.法线.曲率.长度等,能够计算曲面的uv切线.法线.面积等. 代码示例一:曲线分析 Platform.LineStyle lineStyle = ...

  10. RECT 数据结构

    数据结构RECT定义了一个矩形的左上角和右下角的坐标 ? 1 2 3 4 5 6 7 8 typedef struct _RECT{         LONG left;         LONG t ...