当前位置:网站首页>AcWing 1131. Saving Private Ryan (the shortest way)
AcWing 1131. Saving Private Ryan (the shortest way)
2022-07-02 19:32:00 【Mr. Qiao Da】
AcWing 1131. Saving Private Ryan
Dealing with data is a very troublesome problem , How to build drawings to record walls and doors , utilize set Record gate , Match with binary record key , This writing operation needs to be learned to remember
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int, int>PII;
const int N = 15, M = 360, INF = 0x3f3f3f3f;
int h[N * N], ne[M], e[M], w[M], idx; // Store adjacency table
int dist[N * N][1 << 11]; // Storage status
deque<PII>q; // Storage status
int n, m, p, k, S;
set<PII>edge; // Record gate
int g[N][N];
int dx[4] = {
1, 0, -1, 0};
int dy[4] = {
0, 1, 0, -1};
int key[N * N];
bool st[N * N][1 << 11];
void add(int a, int b, int c){
e[idx] = b;
w[idx] = c;
ne[idx] = h[a];
h[a] = idx ++ ;
}
void build(){
// Drawing
for(int i = 1; i <= n; i ++ ){
for(int j = 1; j <= m; j ++ ){
for(int k = 0; k < 4; k ++ ){
int xx = dx[k] + i;
int yy = dy[k] + j;
if(!xx || !yy || xx > n || yy > m) continue; // If out of bounds , Just skip it
int a = g[i][j];
int b = g[xx][yy];
if(!edge.count({
a, b})) add(a, b, 0); // If there is no door in this place , It's just a wall
}
}
}
}
int bfs(){
memset(dist, 0x3f, sizeof dist);
dist[1][0] = 0; // The status is the first point , The key is 0
q.push_back({
1, 0}); // The status is the first point , The key is 0
while(q.size()){
auto op = q.front();
q.pop_front();
if(st[op.x][op.y]) continue; // If this state has been used
st[op.x][op.y] = true;
if(op.x == n * m) return dist[op.x][op.y];
if(key[op.x]){
// If there is a key in this place
int state = op.y | key[op.x];
if(dist[op.x][state] > dist[op.x][op.y]){
dist[op.x][state] = dist[op.x][op.y];
q.push_front({
op.x, state});
}
}
for(int i = h[op.x]; ~i; i = ne[i]){
int j = e[i];
if(w[i] && !(op.y >> w[i] - 1 & 1)) continue; // If there is a door here but there is no key
if(dist[j][op.y] > dist[op.x][op.y] + 1){
//
dist[j][op.y] = dist[op.x][op.y] + 1;
q.push_back({
j, op.y});
}
}
}
return -1;
}
int main()
{
cin>>n>>m>>p>>k;
for(int t = 1, i = 1; i <= n; i ++ ){
for(int j = 1; j <= m; j ++ ){
g[i][j] = t ++ ;
}
}
memset(h, -1, sizeof h);
while(k -- ){
int x1, y1, x2, y2, z;
cin>>x1>>y1>>x2>>y2>>z;
int a = g[x1][y1], b = g[x2][y2];
edge.insert({
a, b}); // Record door or wall
edge.insert({
b, a});
if(z){
add(a, b, z);
add(b, a, z);
}
}
build(); // Drawing
cin>>S;
while(S -- ){
int a, b, c;
cin>>a>>b>>c;
key[g[a][b]] |= 1 << c - 1; // Store keys in binary
}
cout<<bfs()<<endl;
return 0;
}
边栏推荐
- 二进制操作
- 虚拟机初始化脚本, 虚拟机相互免秘钥
- Binary operation
- juypter notebook 修改默认打开文件夹以及默认浏览器
- IEDA refactor的用法
- Windows2008r2 installing php7.4.30 requires localsystem to start the application pool, otherwise 500 error fastcgi process exits unexpectedly
- 全志A33使用主线U-Boot
- Thread application instance
- 【pytorch学习笔记】Tensor
- codeforces每日5题(均1700)-第四天
猜你喜欢

Web2.0 giants have deployed VC, and tiger Dao VC may become a shortcut to Web3

Advanced performance test series "24. Execute SQL script through JDBC"

Compile oglpg-9th-edition source code with clion

程序猿入门攻略(十二)——数据的存储
冒泡排序数组

Use cheat engine to modify money, life and stars in Kingdom rush

机器学习笔记 - 时间序列预测研究:法国香槟的月销量

codeforces每日5题(均1700)-第四天

安装单机redis详细教程

为什么要做企业固定资产管理系统,企业如何加强固定资产管理
随机推荐
中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
Registration opportunity of autowiredannotationbeanpostprocessor in XML development mode
开发固定资产管理系统,开发固定资产管理系统用什么语音
Machine learning notes - time series prediction research: monthly sales of French champagne
Codeworks 5 questions per day (1700 average) - day 4
"Patient's family, please come here" reading notes
A4988 drive stepper motor "recommended collection"
Registration opportunity of autowiredannotationbeanpostprocessor under annotation development mode
《代碼整潔之道》讀書筆記
IEDA refactor的用法
End to end object detection with transformers (Detr) paper reading and understanding
Bubble sort array
C文件输入操作
第七章-类基础
Memory management of C
Processing strategy of message queue message loss and repeated message sending
High frequency interview questions
LeetCode 0871.最低加油次数 - 类似于POJ2431丛林探险
MySQL advanced (Advanced) SQL statement
SIFT特征点提取「建议收藏」