白駿11967号:点灯
電気をつける
白駿11967号:点灯
アイデア
もともと訪問できなかった場所なら、後で電気をつけて訪問することができます.このような状況のため、今は行けませんが、これからは明かりがついていれば、行ける場所を追加記録します.そしてライトアップの時に可愛いベッシーちゃんを一瞬そこに移動(?)君にやらせる.
コード#コード#
#include <bits/stdc++.h>
using namespace std;
int N, M, ANS = 1;
bool visited[101][101];
bool light[101][101];
bool available[101][101];
int dy[4] = {1, -1, 0, 0};
int dx[4] = {0, 0, 1, -1};
vector<pair<int, int>> graph[101][101];
queue<pair<int, int>> q;
bool check_safe(int y, int x) {
return (y > 0 && y <= N && x > 0 && x <= N);
}
void bfs() {
visited[1][1] = true;
available[1][1] = true;
light[1][1] = true;
q.push({1, 1});
while(!q.empty()) {
int y = q.front().first;
int x = q.front().second;
q.pop();
for (auto l : graph[y][x]) {
if (!light[l.first][l.second]) {
light[l.first][l.second] = true;
ANS++;
if (available[l.first][l.second]) {
visited[l.first][l.second] = true;
q.push({l.first, l.second});
//cout << "Teleport " << l.first << ' ' << l.second << '\n';
}
}
}
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (!check_safe(ny, nx)) continue;
else if (visited[ny][nx]) continue;
else if (!light[ny][nx]) {
available[ny][nx] = true;
}
else {
available[ny][nx] = true;
visited[ny][nx] = true;
q.push({ny, nx});
}
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
int x, y, a, b;
while (M--) {
cin >> x >> y >> a >> b;
graph[x][y].push_back({a, b});
}
bfs();
cout << ANS << '\n';
return 0;
}
おしゃべり
スタート位置が点灯していないのはいつも間違っていますどのTCが調子を変えたのか見せてくれればよかったのに...
USACO問題の牛の名前が可愛すぎますベッシー.
Reference
この問題について(白駿11967号:点灯), 我々は、より多くの情報をここで見つけました
https://velog.io/@ks1ksi/백준-11967번-불켜기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <bits/stdc++.h>
using namespace std;
int N, M, ANS = 1;
bool visited[101][101];
bool light[101][101];
bool available[101][101];
int dy[4] = {1, -1, 0, 0};
int dx[4] = {0, 0, 1, -1};
vector<pair<int, int>> graph[101][101];
queue<pair<int, int>> q;
bool check_safe(int y, int x) {
return (y > 0 && y <= N && x > 0 && x <= N);
}
void bfs() {
visited[1][1] = true;
available[1][1] = true;
light[1][1] = true;
q.push({1, 1});
while(!q.empty()) {
int y = q.front().first;
int x = q.front().second;
q.pop();
for (auto l : graph[y][x]) {
if (!light[l.first][l.second]) {
light[l.first][l.second] = true;
ANS++;
if (available[l.first][l.second]) {
visited[l.first][l.second] = true;
q.push({l.first, l.second});
//cout << "Teleport " << l.first << ' ' << l.second << '\n';
}
}
}
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (!check_safe(ny, nx)) continue;
else if (visited[ny][nx]) continue;
else if (!light[ny][nx]) {
available[ny][nx] = true;
}
else {
available[ny][nx] = true;
visited[ny][nx] = true;
q.push({ny, nx});
}
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
int x, y, a, b;
while (M--) {
cin >> x >> y >> a >> b;
graph[x][y].push_back({a, b});
}
bfs();
cout << ANS << '\n';
return 0;
}
Reference
この問題について(白駿11967号:点灯), 我々は、より多くの情報をここで見つけました https://velog.io/@ks1ksi/백준-11967번-불켜기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol