洛谷 P2712 摄像头
题目描述
食品店里有n个摄像头,这种摄像头很笨拙,只能拍摄到固定位置。现有一群胆大妄为的松鼠想要抢劫食品店,为了不让摄像头拍下他们犯罪的证据,他们抢劫前的第一件事就是砸毁这些摄像头。
为了便于砸毁摄像头,松鼠歹徒们把所有摄像头和摄像头能监视到的地方统一编号,一个摄像头能被砸毁的条件是该摄像头所在位置不被其他摄像头监视。
现在你的任务是帮松鼠们计算是否可以砸掉所有摄像头,如不能则输出还没砸掉的摄像头的数量。
输入输出格式
输入格式:
第1行,一个整数n,表示摄像头的个数。
第2到n+1行是摄像头的信息,包括:摄像头的位置x,以及这个摄像头可以监视到的位置数m,之后m个数y是此摄像头可以监视到的位置。(砸了这些摄像头之后自然这些位置就监视不到了)
输出格式:
若可以砸掉所有摄像头则输出“YES”,否则输出还没砸掉的摄像头的数量。
输入输出样例
5
1 1 2
2 1 1
3 1 7
4 1 1
5 0
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 摄像头的更多相关文章
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 洛谷 P1379 八数码难题 Label:判重&&bfs
特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...
随机推荐
- P1052 过河(状态压缩)
P1052 过河(状态压缩) 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把 ...
- B1816 扑克牌 二分答案 + 贪心
这个题我一开始想到了二分答案,但是去写了另一个算法,用优先队列直接模拟,最后GG了...因为我没考虑每个套牌只能有一个joker...尴尬. 后来二分答案,然后暴力验证就行了. 题干: Descrip ...
- C++调用shell脚本
调用函数时候,传入脚本路径名称或者具体命令. int shell_call(std::string &cmdstr) { }; char line[maxline]; FILE *fpin; ...
- Coursera Algorithms week1 查并集 练习测验:2 Union-find with specific canonical element
题目原文: Add a method find() to the union-find data type so that find(i) returns the largest element in ...
- hdu3511-Prison Break
纪念一下人生中第一道扫描线算法的题.....其实不是严格上的第一道...第一次遇到的那个至今没过..... 题目链接: http://acm.hdu.edu.cn/showproblem.php?pi ...
- 基于Angular4+ server render(服务端渲染)开发教程
目标: 1.更好的 SEO,方便搜索爬虫抓取页面内容 2.更快的内容到达时间(time-to-content) 影响: 1.用户:比原来更快的看到渲染的页面,提升用户体验 2.开发人员:某些代码可能需 ...
- thinkphp 上传多张图片
tp3.23 没有找到同时上传多张图片 手册有讲过:http://www.kancloud.cn/manual/thinkphp/1876 其实可以通过,多张图片多次上传来到达效果 hmlt: < ...
- epoll实现reactor模式
- B - Chat room
Problem description Vasya has recently learned to type and log on to the Internet. He immediately en ...
- String,创建对象问题
String str=new String("aaa"); 这行代码究竟创建了几个String对象呢?答案是2个,而不是3个.由于new String("aaa" ...