题目描述

食品店里有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. Flume 读取JMS 消息队列消息,并将消息写入HDFS

    利用Apache Flume 读取JMS 消息队列消息.并将消息写入HDFS,flume agent配置例如以下: flume-agent.conf #name the  components on ...

  2. Codeforces Round #281 (Div. 2) A. Vasya and Football 暴力

    A. Vasya and Football   Vasya has started watching football games. He has learned that for some foul ...

  3. oc37--类工厂方法

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int ag ...

  4. NOI 2009A 诗人小G

    NOI 2009A 诗人小G 诗人小G [问题描述] 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们 ...

  5. 关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案

    关于api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案 目录 关于api-ms-win-crt-runtimel1-1-0dll缺失的解决方案 目录 安装VC redite ...

  6. HTML中的文本框textarea标签

    转自:https://www.jb51.net/web/183411.html <textarea></textarea>用来创建一个可以输入多行的文本框,此标志对用于< ...

  7. Shuffle'm Up(串)

    http://poj.org/problem?id=3087 题意:每组3个串,前两个串长度为n,第三个串长度为2*n,依次从第二个串(s2)中取一个字符,从第一个串(s1)中取一个字符,...... ...

  8. Halcon学习笔记之支持向量机(二)

    例程:classify_halogen_bulbs.hdev 在Halcon中模式匹配最成熟最常用的方式该署支持向量机了,在本例程中展示了使用支持向量机对卤素灯的质量检测方法.通过这个案例,相信大家可 ...

  9. MySQL命令学习之技巧(博主推荐)

    关于,这篇博客呢,是

  10. Django学习案例一(blog):四. 使用Admin

    1. 创建超级用户 python manage.py createsuperuser 创建过程中输入用户名,并设定密码(记住). 后台管理汉化.修改settings.py中LANGUAGE_CODE ...