题目描述

食品店里有n个摄像头,这种摄像头很笨拙,只能拍摄到固定位置。现有一群胆大妄为的松鼠想要抢劫食品店,为了不让摄像头拍下他们犯罪的证据,他们抢劫前的第一件事就是砸毁这些摄像头。

为了便于砸毁摄像头,松鼠歹徒们把所有摄像头和摄像头能监视到的地方统一编号,一个摄像头能被砸毁的条件是该摄像头所在位置不被其他摄像头监视。

现在你的任务是帮松鼠们计算是否可以砸掉所有摄像头,如不能则输出还没砸掉的摄像头的数量。

输入输出格式

输入格式:

第1行,一个整数n,表示摄像头的个数。

第2到n+1行是摄像头的信息,包括:摄像头的位置x,以及这个摄像头可以监视到的位置数m,之后m个数y是此摄像头可以监视到的位置。(砸了这些摄像头之后自然这些位置就监视不到了)

输出格式:

若可以砸掉所有摄像头则输出“YES”,否则输出还没砸掉的摄像头的数量。

输入输出样例

输入样例#1:

5
1 1 2
2 1 1
3 1 7
4 1 1
5 0
输出样例#1:

2

解题思路

  这题可以说是2015noipd1t2信息传递的简化版,这题只用按拓扑排序依次把入度为0的点删掉,再统计没被删的有多少就行了,信息传递那题还要统计剩下的点中的最小环。还有一个不同是这题要把摄像机编号和位置用map离散化一下。大概思路就是这样,详细步骤在代码注释里

源代码

#include<cstdio>
#include<vector>
#include<map>
using namespace std;
int n;//摄像头总数
map<int,int> ma;//离散化位置到编号(ca中下标)
struct camera{
int num,in;//儿子数(似乎后面没用到)、入度
vector<int> son;//儿子们的位置
}temp;//temp是方便输入的临时变量
vector<camera> ca;//吐槽题目不给数据范围
void del(int x)//x是摄像机编号,即在ca中的下标
{
int size=ca[x].son.size();
for(int i=;i<size;i++)//便遍历第x号摄像机的儿子的位置
{
if(ma.count(ca[x].son[i])) //如果这个位置确实有摄像机(有两个数据点的摄像机拍摄到了没有其他摄像机的空位置,导致我开始只有80分)
{
ca[ma[ca[x].son[i]]].in--;//儿子摄像机的入度减1
if(ca[ma[ca[x].son[i]]].in<=)//减到0了
{
del(ma[ca[x].son[i]]);//就把这个儿子也删了吧
}
}
}
}
int main()
{
scanf("%d",&n);
for(int i=,lo,so;i<n;i++)//lo位置、so儿子数
{
scanf("%d%d",&lo,&so);
ma[lo]=i;//离散化!
temp.num=so;
temp.in=;//入度清零
for(int j=;j<so;j++)
{
scanf("%d",&lo);
temp.son.push_back(lo);//输入各个儿子的位置
}
ca.push_back(temp);
}
for(int i=;i<n;i++)//遍历ca[]每一台摄像机,增加它们儿子的入度
{
for(int j=;j<ca[i].son.size();j++)//遍历ca[i]能拍到的的每个位置
{
if(ma.count(ca[i].son[j]))//如果这个位置有也摄像机
ca[ma[ca[i].son[j]]].in++;//增加入度
}
}
for(int i=;i<n;i++)
{
if(ca[i].in<=)//入度为零就删了
{
del(i);
}
}
int ans=;
for(int i=;i<n;i++)//统计有多少摄像机还没被砸
{
if(ca[i].in>) ans++;
}
if(ans==) printf("YES");//全砸了,抢劫成功
else printf("%d",ans);//砸不完,输出剩下的摄像机数量
return ;
}

洛谷 P2712 摄像头的更多相关文章

  1. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  5. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  6. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  7. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  8. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  9. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

随机推荐

  1. Linux批量生成生成帐户脚本,随机密码

    此脚本应用于生产环境下生成帐户,也可生成成百上千个密码相同的帐户.脚本代码如下: 批量生成: #!/bin/bash for name in tom jerry joe jane do useradd ...

  2. poj2594——最小路径覆盖

    Description Have you ever read any book about treasure exploration? Have you ever see any film about ...

  3. B1003 物流运输(最短路 + dp)

    这个dp其实不是那么难,状态其实很好想,但是细节有少许偏差. 当时我并没有想到最短路要在dp之外写,后来看题解之后发现要预处理出来每段时间1~M的最短路,然后直接dp. 题目: Description ...

  4. 数据预处理之Minkowski距离计算

    template <class T1, class T2> double Minkowski(const std::vector<T1> &inst1, const s ...

  5. Enter the path to the kernel header files for the 3.18.0-kali1-686-pae kerne vmware tool

    安装VMWare Tools出现提示:Enter the path to the kernel header files for the 3.18.0-kali1-686-pae kerne? 201 ...

  6. Coursera Algorithms week3 归并排序 练习测验: Counting inversions

    题目原文: An inversion in an array a[] is a pair of entries a[i] and a[j] such that i<j but a[i]>a ...

  7. 5-7 第五天 微信 JS-SDK-简介

    微信的SDK显然呢并不是在这个公众号里面直接使用的,而是在网页里面使用的.什么样的网页呢?就是微信内置的浏览器.你从朋友圈.从好友消息.从群消息,确定是从公众号的回复里面打开一个链接. 便会启动一个浏 ...

  8. Could not create the view: An unexpected exception was thrown. Myeclipse空间报错

    我的路径D:\MyEclipse 10\.metadata\.plugins\org.eclipse.core.runtime\.settings 我也遇到过这个问题,就是工作空间的问题好像是删除你工 ...

  9. C# 多线程系列(四)

    Parallel类 Parallel类定义了for.foreach和invoke的静态方法.Parallel类使用多个任务,因此使用多个线程来完成这个作业. Parallel.For Parallel ...

  10. Excel的用到的常规的技巧

    这几天在做各种发票的报表,好几百的数据当然离不开EXCel,自己又是个白班,就记录下啦! EXCEL 判断某一单元格值是否包含在某一列中 就在Excel的表格中加入这个函数:=IF(ISERROR(V ...