当前位置:网站首页>Save Private Ryan - map building + voltage dp+deque+ shortest circuit
Save Private Ryan - map building + voltage dp+deque+ shortest circuit
2022-07-04 01:58:00 【Wawa source】


Topic link
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
#include <deque>
#include <vector>
using namespace std;
#define x first
#define y second
typedef pair<int,int>PII;
const int N = 110,M = 1<<10;
vector<PII>g[N];
set<PII>edges; // Judge whether the edge has been built in the figure
int n,m,p,k;
int dist[N][M]; // The first dimension is coordinates , The second dimension is the key state
bool st[N][M]; // Judge whether it has been updated , If it is updated, it will be the minimum , There is no need to change
int id[12][12]; // Map two dimensions to one dimension , Easy to write
int key[N]; // Record the key of each position , In binary
void build()
{
int dx[4]={
1,0,-1,0},dy[4]={
0,1,0,-1};
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
for(int u=0;u<4;u++)
{
int x=i+dx[u],y=j+dy[u];
if(x<1||x>n||y<1||y>m)continue;
int a=id[i][j],b=id[x][y];
// Build a map while walking that is not built in the map
if(!edges.count({
a,b}))
g[a].push_back({
b,0});
}
}
}
}
int bfs()
{
// deque ,
memset(dist,0x3f,sizeof dist);
deque<PII>q;
q.push_back({
1,0});
dist[1][0]=0;
while(q.size())
{
auto t=q.front();
q.pop_front();
if(st[t.x][t.y])continue;
st[t.x][t.y]=true;
if(t.x==n*m)return dist[t.x][t.y];
// Pick up the key in this position
if(key[t.x])
{
int state=t.y|key[t.x];
if(dist[t.x][state]>dist[t.x][t.y])
{
dist[t.x][state]=dist[t.x][t.y];
q.push_front({
t.x,state});
}
}
for(auto [v,w] : g[t.x])
{
// If you need a key for the next position , But the last point is updated, and you can skip directly without this key
if(w&&!(t.y>>w-1&1))continue;
if(dist[v][t.y]>dist[t.x][t.y]+1)
{
dist[v][t.y]=dist[t.x][t.y]+1;
q.push_back({
v,t.y});
}
}
}
return -1;
}
signed main()
{
cin>>n>>m>>p>>k;
for(int i=1,t=1;i<=n;i++)
for(int j=1;j<=m;j++)
id[i][j]=t++;
for(int i=1;i<=k;i++)
{
int x1,y1,x2,y2,c;
cin>>x1>>y1>>x2>>y2>>c;
int a=id[x1][y1],b=id[x2][y2];
edges.insert({
a,b});
edges.insert({
b,a});
if(c)g[a].push_back({
b,c}),g[b].push_back({
a,c});
}
build();
int s;
cin>>s;
while(s--)
{
int x1,y1,c;
cin>>x1>>y1>>c;
key[id[x1][y1]]|=1<<c-1;
}
cout<<bfs()<<endl;
}
边栏推荐
- Example 072 calculation of salary it is known that the base salary of an employee of a company is 500 yuan. The amount of software sold by the employee and the Commission method are as follows: Sales
- Is Shengang securities company as safe as other securities companies
- C import Xls data method summary III (processing data in datatable)
- MySQL deadly serial question 2 -- are you familiar with MySQL index?
- Openbionics exoskeleton project introduction | bciduino community finishing
- Why can't it run (unresolved)
- Sequence sorting of basic exercises of test questions
- Writeup (real questions and analysis of ciscn over the years) of the preliminary competition of national college students' information security competition
- Huawei rip and BFD linkage
- Override and virtual of classes in C #
猜你喜欢

Should enterprises start building progressive web applications?

Hash table, string hash (special KMP)
![Jerry's watch listens to the message notification of the target third-party software and pushes the message to the device [article]](/img/8b/ff062f34d36e1caa9909c8ab431daf.jpg)
Jerry's watch listens to the message notification of the target third-party software and pushes the message to the device [article]

How programmers find girlfriends through blind dates

Openbionics exoskeleton project introduction | bciduino community finishing

String hash, find the string hash value after deleting any character, double hash

Chapter 3.4: starrocks data import - Flink connector and CDC second level data synchronization

What are the advantages and disadvantages of data center agents?

The automatic control system of pump station has powerful functions and diverse application scenarios

ES6 deletes an attribute in all array objects through map, deconstruction and extension operators
随机推荐
Feign implements dynamic URL
Meta metauniverse female safety problems occur frequently, how to solve the relevant problems in the metauniverse?
Yyds dry goods inventory hand-in-hand teach you the development of Tiktok series video batch Downloader
Customize redistemplate tool class
Setting function of Jerry's watch management device [chapter]
Related configuration commands of Huawei rip
In yolov5, denselayer is used to replace focus, and the FPN structure is changed to bi FPN
Idea if a class cannot be found, it will be red
Is Shengang securities company as safe as other securities companies
MySQL introduction - functions (various function statistics, exercises, details, tables)
Containerization technology stack
Introduction to Tianchi news recommendation: 4 Characteristic Engineering
High level application of SQL statements in MySQL database (I)
Should enterprises start building progressive web applications?
Small program graduation project based on wechat reservation small program graduation project opening report reference
After listening to the system clear message notification, Jerry informed the device side to delete the message [article]
Jerry's modification setting status [chapter]
Chain ide -- the infrastructure of the metauniverse
LeetCode 168. Detailed explanation of Excel list name
Ceramic metal crowns - current market situation and future development trend