偷盗钻石(Diamond)
题目描述
H国的国家博物馆最近要展出一颗巨型钻石,当然,为了防止钻石被盗,博物馆对其进行了重重保护。
H国博物馆的结构可以看成一个凸n边形,顶点编号1到n。然后通过若干面墙壁将博物馆分割成多个三角形的房间,每一道墙都会连接n边形的两个顶点。显然我们可以知道H国博物馆的房间一共有n-2个,下图为n=7是博物馆的一个平面图。
为了方便游客参观,博物馆的所有墙壁上都会有一道门(包括外墙)。游客可以通过门从一个房间来到另一个房间参观,或是进出博物馆。平时这些门都是打开着的,一旦钻石被盗,这些门就会立即锁上。著名的大盗Joker盯上了这枚巨型钻石,但是他也知道自己一旦把钻石带走,所有的门都会锁上。但这并不能难倒他,他能够打开所有门上的锁,然而开锁会消耗时间,而逃离博物馆的时间正比于开锁的总次数。为了尽快逃离,Joker会选择最优的逃离路径(他已经事先获得了博物馆的结构图)。
由于博物馆的安保人员有限,他们不能够在第一时间赶到,抓住Joker。因此他们希望将钻石摆放在尽量安全的房间中,使得Joker的逃离时间尽可能长。请你告诉馆长,Joker的逃离时间(即开锁次数)最大为多少,以方便馆长确定是否需要更多的安保人员。
输入
输入文件的第一行,包含一个正整数n,表示博物馆外墙的顶点数。
接下来的n-2行,每行三个正整数xi,yi和zi,表示每个房间的三个顶点编号。
输出
输出文件仅一行一个正整数,表示Joker的最大逃离时间。
样例输入
样例输出
提示
30%数据n<=50.
60%数据n<=5000.
100%数据n<=200000.
SOL:bfs
#pragma GCC optimize("-Ofast") #include<bits/stdc++.h> #define pii pair<int,int> #define eho(x) for(int i=head[x];i;i=net[i]) #define M 1000007 #define N 400007 #define v fall[i] using namespace std; int n,tot,p[4],fall[M],net[M],head[N],vis[N],x,ans; queue<int> q; map<pii,int> mp; void read(int &x){static char c; static int b;for (b=1,c=getchar();!isdigit(c);c=getchar()) if (c=='-') b=-1;for (x=0;isdigit(c);c=getchar()) x=x*10+c-48;x*=b; } void add(int x,int y){ // cerr<<x<<' '<<y<<endl;fall[++tot]=y; net[tot]=head[x]; head[x]=tot;fall[++tot]=x; net[tot]=head[y]; head[y]=tot; } signed main () {read(n);for (int i=1;i<=n-2;i++) {read(p[0]),read(p[1]),read(p[2]);sort(p,p+3);if (mp.count(pii(p[0],p[1]))) add(i,mp[pii(p[0],p[1])]);else mp[pii(p[0],p[1])]=i;if (mp.count(pii(p[0],p[2]))) add(i,mp[pii(p[0],p[2])]);else mp[pii(p[0],p[2])]=i;if (mp.count(pii(p[1],p[2]))) add(i,mp[pii(p[1],p[2])]);else mp[pii(p[1],p[2])]=i;if (p[1]-p[0]==1) add(n+1,i);if (p[2]-p[1]==1) add(n+1,i);if (p[2]==n&&p[0]==1) add(n+1,i);}q.push(n+1);memset(vis,127,sizeof vis);vis[n+1]=0;while (!q.empty()) {x=q.front(); q.pop();eho(x) if (vis[v]>vis[x]+1) {vis[v]=vis[x]+1,q.push(v); if (vis[v]>ans) ans=vis[v];}}printf("%d\n",ans); }
转载于:https://www.cnblogs.com/rrsb/p/9489555.html
偷盗钻石(Diamond)相关推荐
- OpenCV钻石Diamond 标记的检测
OpenCV钻石Diamond 标记的检测 钻石Diamond 标记的检测 ChArUco钻石Diamond 创作 ChArUco钻石Diamond 检测 ChArUco钻石Diamond 姿势估计 ...
- 钻石DIAMOND英语源于DIAMAUND钻石
在全部宝石中,最贵重.最吸引人的要数钻石了.钻石贵重,所以选购钻石时,有必要懂得辨别钻石的常识. 钻石(DIAMOND)一词,开始来源于希腊文演化的古法文DIAMAUND,愈思是指"坚固 ...
- 钻石DIAMOND一词来源于古法文DIAMAUND钻石
在全部宝石中,最贵重.最吸引人的要数钻石了.钻石贵重,所以选购钻石时,有必要懂得辨别钻石的常识. 钻石(DIAMOND)一词,开始来源于希腊文演化的古法文DIAMAUND,愈思是指"坚固 ...
- CodeVs天梯钻石Diamond题解
title: CodeVs天梯之Diamond date: 2017-12-28 tags: 天梯 CodesVs categories: OI CodeVs刷题攻略之Diamond 2018.1.1 ...
- 【codevs1063NOIP04PJ】合并果子,贪心の钻石
1063 合并果子 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果 ...
- 【codevs2287】火车站,第一个A掉的钻石题(迟来的解题报告)
2287 火车站 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 火车从始发站(称为第1站)开出,在始发站上车的人数 ...
- css3绘制常见的30种形状(心形,五角星,六边形,钻石,对话框,阴阳鱼图等)
CSS实现圆角,三角,五角星,五边形,爱心,12角星,8角星,圆,椭圆,圆圈,八卦等等 新出的html5新增了不少标签,性能更强,原来的很繁琐的功能几个标签就能实现,同时CSS3也推出,更是一大亮点, ...
- Lesson 7 Too late 为时太晚
1.原文 2. 参考译文 3. New words and expressions ★detective n. 侦探 detective story 侦探小说 ★airport n. 机场 ★airf ...
- 1380 没有上司的舞会
1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description Ural大学有N个职员,编号为1~N.他 ...
最新文章
- CUDA 7流简化并发
- AI志愿超强攻略|中国高校AI专业最全院校排名课程对比(附链接)
- 何恺明、陈鑫磊新研究:提出实例分割新方法,效果比肩Mask R-CNN
- linux下redmine3.3迁移、升级、插件备忘录
- JavaScript碎片—函数闭包(模拟面向对象)
- 子组件是表格时向父组件传值
- 厂办大集体改制不签字_许昌二印,磨砂技术被外国觊觎,老工人说烂在肚子里也不外漏...
- 场景文字识别的算法创新与应用,来自百度的技术前沿
- 实战系列-IDEA中Spring MVC实现接口功能
- matlab练习程序(方框模糊)
- 用Python DBUtils安全连接mssql
- 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
- 【Oracle】Oracle错误编码大全
- Java Wbe 学习心得 day06
- 微原创——好用的文章转换工具自媒体利器
- 树莓派安装系统和系统备份还原
- NIVIDIA Tegra K1 QWT安装使用问题和解决办法
- Tkinter——②entry(文本框)和text(多行文本)
- 鸿蒙app前后端流程实现
- 数据库的事务ACID特性以及MySQL如何保持事物特性