0%

ABC-383-C - Humidifier 3 (多源广搜)

思路讲解

多源广搜经典套路,如果该点到达时间没有别的点早,就可以不用走了

然后把所有点加入q,实现多源广搜

1
2
3
4
5
6
7
8
FOR(i,1,N){
FOR(j,1,M){
if(maze[i][j]!='H') continue;
q.push({i,j,0});
vis[i][j]=0;
}
}
bfs();

AC代码

https://atcoder.jp/contests/abc383/submissions/62366428

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// Problem: C - Humidifier 3
// Contest: AtCoder - Daiwa Securities Co. Ltd. Programming Contest 2024(AtCoder Beginner Contest 383)
// URL: https://atcoder.jp/contests/abc383/tasks/abc383_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = a; i <= b; ++i)
#define ROF(i, a, b) for (int i = a; i >= b; --i)
#define all(x) x.begin(),x.end()
#define debug(x) cerr<<x<<' '
#define CLR(i,a) memset(i,a,sizeof(i))

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef array<ll,3> arr;
typedef double DB;
const ll MAXN=static_cast<ll>(1e3)+10,MAXval=static_cast<ll>(5e18)+3;

ll N,M,D;
char maze[MAXN][MAXN];
ll vis[MAXN][MAXN];

ll dx[4]={1,0,-1,0};
ll dy[4]={0,-1,0,1};

queue<arr> q;

inline void bfs(){ // 需要对之前所有加入q的点做好vis=true的处理
while(!q.empty()){
ll x=q.front()[0],y=q.front()[1],d=q.front()[2];
q.pop();
if(d>=D) continue;
FOR(i,0,3){
ll fx=x+dx[i],fy=y+dy[i];
if(fx<1 || fx>N) continue;
if(fy<1 || fy>M) continue;
if(vis[fx][fy]<d+1) continue;
if(maze[fx][fy]=='#') continue;
vis[fx][fy]=d+1;
q.push({fx,fy,d+1});
// cerr<<fx<<' '<<fy<<'\n';
}
}
}

int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);

cin>>N>>M>>D;
FOR(i, 1, N){
FOR(j,1,M){
cin>>maze[i][j];
}
}
CLR(vis,0x3f);
ll stand=vis[0][0];
FOR(i,1,N){
FOR(j,1,M){
if(maze[i][j]!='H') continue;
q.push({i,j,0});
vis[i][j]=0;
}
}
bfs();
ll ans=0;
FOR(i,1,N){
FOR(j,1,M){
if(vis[i][j]!=stand) ++ans;
}
}
cout<<ans<<endl;
return 0;
}
/*
AC
https://atcoder.jp/contests/abc383/submissions/62366428
*/

心路历程(WA,TLE,MLE……)