【BZOJ1924】【SDOI2010】所驼门王的宝藏(Tarjan,SPFA)

题目描述

在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族。被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”。所驼门王毕生致力于维护家族的安定与和谐,他曾亲自率军粉碎河蟹帝国主义的野蛮侵略,为族人立下赫赫战功。所驼门王一生财宝无数,但因其生性节俭低调,他将财宝埋藏在自己设计的地下宫殿里,这也是今天Henry Curtis故事的起点。Henry是一个爱财如命的贪婪家伙,而又非常聪明,他费尽心机谋划了这次盗窃行动,破解重重机关后来到这座地下宫殿前。

整座宫殿呈矩阵状,由R×C间矩形宫室组成,其中有N间宫室里埋藏着宝藏,称作藏宝宫室。宫殿里外、相邻宫室间都由坚硬的实体墙阻隔,由一间宫室到达另一间只能通过所驼门王独创的移动方式——传送门。所驼门王为这N间藏宝宫室每间都架设了一扇传送门,没有宝藏的宫室不设传送门,所有的宫室传送门分为三种:

“横天门”:由该门可以传送到同行的任一宫室;“纵寰门”:由该门可以传送到同列的任一宫室;
“自*河蟹*由*河蟹*门”:由该门可以传送到以该门所在宫室为中心周围8格中任一宫室(如果目标宫室存在的话)。

深谋远虑的Henry当然事先就搞到了所驼门王当年的宫殿招标册,书册上详细记录了每扇传送门所属宫室及类型。而且,虽然宫殿内外相隔,但他自行准备了一种便携式传送门,可将自己传送到殿内任意一间宫室开始寻宝,并在任意一间宫室结束后传送出宫。整座宫殿只许进出一次,且便携门无法进行宫室之间的传送。不过好在宫室内传送门的使用没有次数限制,每间宫室也可以多次出入。

现在Henry已经打开了便携门,即将选择一间宫室进入。为得到尽多宝藏,他希望安排一条路线,使走过的不同藏宝宫室尽可能多。请你告诉Henry这条路线最多行经不同藏宝宫室的数目。
输入输出格式
输入格式:

输入文件sotomon.in

第一行给出三个正整数N, R, C。

以下N行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第xi行第yi列的藏宝宫室,类型为Ti。Ti是一个1~3间的整数,1表示可以传送到第xi行任意一列的“横天门”,2表示可以传送到任意一行第yi列的“纵寰门”,3表示可以传送到周围8格宫室的“自河蟹河蟹门”。

保证1≤xi≤R,1≤yi≤C,所有的传送门位置互不相同。

输出格式:

输出文件sotomon.out只有一个正整数,表示你确定的路线所经过不同藏宝宫室的最大数目。

输入样例#1:

10 7 7
2 2 1
2 4 2
1 7 2
2 7 3
4 2 2
4 4 1
6 7 3
7 7 1
7 5 2
5 2 1

输出样例#1:

9

题解

和洛谷的缩点模板题简直不要一样。。。。
首先考虑建边,我暴力建边然后就过了???
用vector存一下每一行每一列的点
然后map储存一下点的位置
对于每一种门,暴力连上边
恩,解决完了连边
剩下的很简单啦
Tarjan缩点
然后重新连边
用一个虚拟点作为源点
跑SPFA最长路就可以啦

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAX 110000
#define MAXL 5000050
#define INF 1000000000
inline int read()
{int x=0,t=1;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=-1,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return x*t;
}
struct Node
{int x,y;
};
inline bool operator <(Node a,Node b)
{if(a.x!=b.x)return a.x<b.x;else return a.y<b.y;
}
struct Line
{int v,next;
}e[MAXL];
struct Line2
{int v,next,w;
}ee[MAXL];
int H[MAX],cnt2=1;
inline void Add(int u,int v,int w)
{ee[cnt2]=(Line2){v,H[u],w};H[u]=cnt2++;
}
int N,M;
int h[MAX],cnt=1;
int w[MAX],dis[MAX],ans;
int xx[MAX],yy[MAX],tt[MAX];
inline void Add(int u,int v)
{e[cnt]=(Line){v,h[u]};h[u]=cnt++;
}
int tim,S[MAX],top;
bool vis[MAX];
int W[MAX],G[MAX];
int dfn[MAX],low[MAX],group;
vector<int> X[MAX],Y[MAX];
map<Node,int> qt;
int d[8][2]={1,0,0,1,-1,0,0,-1,1,1,1,-1,-1,1,-1,-1};
void Tarjan(int u)
{dfn[u]=low[u]=++tim;vis[u]=true;S[++top]=u;for(int i=h[u];i;i=e[i].next){int v=e[i].v;if(!dfn[v]){Tarjan(v);low[u]=min(low[u],low[v]);}elseif(vis[v])low[u]=min(low[u],dfn[v]);}if(low[u]==dfn[u]){++group;int v;do{v=S[top--];W[group]++;G[v]=group;vis[v]=false;}while(v!=u);}
}
int main()
{N=read();read();read();for(int i=1;i<=N;++i){xx[i]=read();yy[i]=read();tt[i]=read();X[xx[i]].push_back(i);Y[yy[i]].push_back(i);qt[(Node){xx[i],yy[i]}]=i;}for(int i=1;i<=N;++i){if(tt[i]==1){for(int j=0,l=X[xx[i]].size();j<l;++j)Add(i,X[xx[i]][j]);}else if(tt[i]==2){for(int j=0,l=Y[yy[i]].size();j<l;++j)Add(i,Y[yy[i]][j]);}else{for(int j=0;j<8;++j){int xxx=xx[i]+d[j][0];int yyy=yy[i]+d[j][1];Node uuu=(Node){xxx,yyy};if(qt.find(uuu)!=qt.end())Add(i,qt[uuu]);}}}for(int i=1;i<=N;++i)if(!dfn[i])Tarjan(i);for(int u=1;u<=N;++u){for(int i=h[u];i;i=e[i].next){int v=e[i].v;if(G[u]!=G[v])Add(G[u],G[v],W[G[v]]);}}for(int i=1;i<=group;++i)Add(0,i,W[i]);queue<int> Q;while(!Q.empty())Q.pop();int ans=0;memset(vis,0,sizeof(vis));Q.push(0);vis[0]=true;while(!Q.empty()){int u=Q.front();Q.pop();for(int i=H[u];i;i=ee[i].next){int v=ee[i].v,w=ee[i].w;if(dis[v]<dis[u]+w){dis[v]=dis[u]+w;ans=max(ans,dis[v]);if(!vis[v]){vis[v]=true;Q.push(v);}}}vis[u]=false;}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/7623972.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ftl 展示图片_视频号变迁的内容展示逻辑

最初的视频号只有单列展示&#xff0c;只有关注栏&#xff0c;并没有朋友和热门区分。产出内容限制为不超过 1 分钟的视频&#xff0c;或 9 张以内的图片。单列信息流、时间倒序排列(也存在个别特例)。这里想到之前龙哥说的关于朋友圈的思考&#xff1a;朋友圈是一个广场&#…

10.3 考试 (考得不好)

T1 我只能说 它是一个比较暴力的dp&#xff0c;需要人力讨论... 所以考试觉得讨论太麻烦&#xff0c;直接内心崩溃了....(好像这也是我考炸的原因吧) 教训&#xff1a;以后要勤快一些&#xff0c;代码能力 唉唉唉 #include <cstdio> #include <cstring> #include &…

java接口文件定义类_Java入门笔记(四)类、包和接口

一、类 classpublic class Person{String name;int age;Person(String name, int age){this.name name;this.age age;}void sayHello(){System.out.println("Hello!");}}1. 属性a. 字段也就是成员变量&#xff0c;在构造方法中进行初始化&#xff0c;没有指针的概念…

小程序[渲染层网络层错误] failed to load image_游戏中水的渲染技术

水的渲染一直是图形学需要解决的问题&#xff0c;本篇博客主要介绍用傅里叶变换算法实现的水反射&#xff0c;也是一种假反射效果&#xff0c;目的是优化效率。实现的效果如下图所示&#xff1a;使用傅里叶系数来表示地形高度的假反射效果&#xff0c;在我们开发的游戏中使用水…

pip install 报错UnicodeDecodeError: 'ascii' codec can't decode byte 0xb5 in

当python在window环境中通过pip安装pandas报标题这样的错&#xff0c;主要是因为python默认编码格式是&#xff1a;ascii 在https://www.python.org/dev/peps/pep-0100/文章中有介绍 解决方法&#xff1a;在python/lib/site.py中加入 import sysreload(sys)sys.setdefaultenc…

jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准

JDBC概述APIJDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API&#xff0c;可以为多种关系数据库提供统一访问&#xff0c;它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准&#xff0c;据此可以构建更高级的工具和接口&#xff0c;使…

怎样判断电饭锅温度传感器的好坏?_空调温度传感器的作用与检测。

温度传感器是指对温度进行感应&#xff0c;并将感应的温度变化情况转换为电信号的功能部件。我们在练习温度传感器检测代换之前&#xff0c;要先对温度传感器的安装位置、结构特点和工作原理有一定的了解。1、温度传感器的安装位置及结构在空调器室内机中&#xff0c;通常设有两…

【codeforces 507E】Breaking Good

【题目链接】:https://vjudge.net/contest/164884#problem/D 【题意】 给你一张图; 图中有些路是完好的;但有些路还没修好; 先不管路有没有修好; 问你从起点到终点的最短路; 如果最短路上有没修好的路,那么你要把它修好; 而不在最短路上的,如果是完好的路,你需要把它摧毁…

java去掉图片边框颜色_sharp 去除图片边框

trim接受参数是颜色相似度, 并不能指定边框颜色, 所以有可能会误删除内容, 需要注意trim 需要转为buffer或者文件后再次操作, 否则图片信息不变从剪裁效果来看, 精度和速度都是可以的const sharp require("sharp");const path "./html/a.png";const outp…

java mail 不用密码_iPhone 无需越狱,简单给 App 加密码锁

在手机上总有些小秘密&#xff0c;也有些APP不想被打开。由于iOS本身限制&#xff0c;想给APP加上密码锁&#xff0c;一般都是需要越狱才能实现。其实在iOS 12就加入了【屏幕使用时间】&#xff0c;用来更好设置APP使用时间的限额。屏幕使用时间屏幕时间功能可以协助您了解自己…

Java植物名录程序_程序员用Java语言编写多线程应用程序,程序员能控制的关键性工作有两个方面:一是编写线程的_________方法;二是建立线程实例。...

沟通的目的是打造“3G团队”&#xff0c;其中的“3G”具体指&#xff1a;“啊,时间过得真快啊!”中的“啊”活塞与气缸盖、气缸壁共同组成燃烧室,承受气缸中气体的压力,并将此压力通过活塞销和连杆传给食品是指人食用或饮用的成品和原料,以及按照传统既是食品又是( )的物品,但不…

【t090】吉祥数

Time Limit: 1 second Memory Limit: 128 MB 【问题描述】 为了迎接圣诞&#xff0c;信息学兴趣小组的同学在辅导老师的带领下&#xff0c;举办了一个盛大的晚会&#xff0c;晚会的第一项内容是做游戏&#xff1a;猜数。老师给 每位同学发一张卡片&#xff0c;每张卡片上都有…

spark内存溢出怎么解决_和平精英:更新需要预留6G内存,玩家抱怨手机扛不住,怎么解决?...

嗨&#xff0c;小伙伴们大家好呀&#xff01;《和平精英》新版本终于来了哈&#xff0c;小伙伴们在22号上午登录游戏&#xff0c;就可以收到更新提示&#xff0c;点击进行更新就好了。或者是在各个应用商店里等待更新推送&#xff0c;也行哦&#xff01;但是呢&#xff0c;每到…

php 字符串0转换bool_PHP数据类型转换(转)

PHP数据类型转换PHP的数据类型转换属于强制转换&#xff0c;允许转换的PHP数据类型有&#xff1a;•(int)、(integer)&#xff1a;转换成整形•(float)、(double)、(real)&#xff1a;转换成浮点型•(string)&#xff1a;转换成字符串•(bool)、(boolean)&#xff1a;转换成布尔…

【转】LDA数学八卦

转自LDA数学八卦 在 Machine Learning 中&#xff0c;LDA 是两个常用模型的简称&#xff1a; Linear Discriminant Analysis 和 Latent Dirichlet Allocation&#xff0c; 在这篇文章中我们主要八卦的是后者。LDA 是一个在文本建模中很著名的模型&#xff0c;类似于 SVD, PLSA …

python3安装json库-python库json快速入门

在本教程中&#xff0c;您将学习如何借助示例在Python中解析&#xff0c;读取和编写JSON。 此外&#xff0c;您将学习将JSON转换为dict并将其打印出来。 JSON简介 JSON (JavaScript Object Notation) 是一种用于表示结构化数据的流行数据格式。 常用于服务器和Web应用程序之间传…

python 常量 模块_Python字符串模块的有用常量

示例Python的string模块为与字符串相关的操作提供常量。要使用它们&#xff0c;请导入string模块&#xff1a;>>> import stringstring.ascii_letters&#xff1a;ascii_lowercase和的串联ascii_uppercase&#xff1a;>>> string.ascii_lettersabcdefghijklm…

PAT1132: Cut Integer

1132. Cut Integer (20) 时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueCutting an integer means to cut a K digits long integer Z into two integers of (K/2) digits long integers A and B. For example, after cutting Z 167334, we…

电脑字体模糊_小红书上传视频模糊?做小红书视频99%的工具都在这了

到现在小红书视频号功能已经上线快三个月了&#xff0c;越来越多的小伙伴开始拍视频、创作视频笔记&#xff0c;但是对于新接触视频的小伙伴来说&#xff0c;拍摄视频好像是一件很难的事&#xff0c;特别是不清楚该选择什么拍摄设备、不知道怎么剪辑视频&#xff0c;还有如何上…

Codeforces Gym101518H:No Smoking, Please(最小割)

题目链接 题意 给出一个n*m的酒店&#xff0c;每个点是一个房间&#xff0c;要将这个酒店的房间划分成为两块&#xff08;一块无烟区&#xff0c;一块吸烟区&#xff09;&#xff0c;相邻的两个房间之间有一条带权边&#xff0c;权值代表空气锁的面积&#xff0c;如果把这条边给…