Submission #36669200


Source Code Expand

#include <bits/stdc++.h>
typedef long long ll;
const int INF = 1e9;
const int MOD = 1e9+7;
const ll LINF = 1e18;
using namespace std;
int H, W;
vector<string> graph;
struct UnionFind {
    vector<int> par; // par[i]:iの親の番号 (例) par[3] = 2 : 3の親が2

    UnionFind(int N) : par(N) { //最初は全てが根であるとして初期化
        for (int i = 0; i < N; i++) par[i] = i;
    }

    int root(int x) { // データxが属する木の根を再帰で得る:root(x) = {xの木の根}
        if (par[x] == x) return x;
        return par[x] = root(par[x]);
    }

    void unite(int x, int y) { // xとyの木を併合
        int rx = root(x); //xの根をrx
        int ry = root(y); //yの根をry
        if (rx == ry) return; //xとyの根が同じ(=同じ木にある)時はそのまま
        par[rx] = ry; //xとyの根が同じでない(=同じ木にない)時:xの根rxをyの根ryにつける
    }

    bool same(int x, int y) { // 2つのデータx, yが属する木が同じならtrueを返す
        int rx = root(x);
        int ry = root(y);
        return rx == ry;
    }
};

int main() {

  
    cin >> H >> W;
    pair<int, int> start;
    UnionFind join(H * W + 10);
    graph = vector<string>(H);
    for (int i = 0; i < H; i++) {
        cin >> graph[i];
        for (int j = 0; j < W; j++) {
            if (graph[i][j] == 'S')start = make_pair(i, j);
        }
    }
    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W-1; j++) {
            
            if (graph[i][j] == '.' && graph[i][j+1] == '.') {
                join.unite(i * W + j, i * W + j+1);
            }
        }
    }
    for (int i = 0; i < H - 1; i++) {
        for (int j = 0; j < W ; j++) {
            if (graph[i][j] == '.' && graph[i + 1][j] == '.') {
                join.unite(i * W + j, (i + 1) * W + j);
            }
            
        }
    }

    int origin,north, east, west, south;
    origin = start.first * W + start.second;
    north = (start.first-1) * W + start.second;
    south = (start.first+1) * W + start.second;
    east = start.first * W + start.second + 1;
    west = start.first * W + start.second - 1;
        if (start.first==0)north = H*W+2;
        if (start.first == H)south = H * W + 3;
        if (start.second == 0)west = H * W + 4;
        if (start.second == W)east = H * W + 5;

    if (join.same(north,east)||
    join.same(north,west)||
    join.same(north,south)||
    join.same(west,east)||
    join.same(west,south)||
    join.same(east,south)
        ){
        cout << "Yes" << endl;
    }



    else {
        cout << "No" << endl;
    }

	return 0;
}

Submission Info

Submission Time
Task E - Round Trip
User amaoto
Language C++ (GCC 9.2.1)
Score 500
Code Size 2728 Byte
Status AC
Exec Time 54 ms
Memory 23988 KiB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:65:9: warning: variable ‘origin’ set but not used [-Wunused-but-set-variable]
   65 |     int origin,north, east, west, south;
      |         ^~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 3
AC × 25
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt
Case Name Status Exec Time Memory
example_00.txt AC 12 ms 3400 KiB
example_01.txt AC 2 ms 3544 KiB
example_02.txt AC 2 ms 3372 KiB
test_00.txt AC 46 ms 8324 KiB
test_01.txt AC 43 ms 8880 KiB
test_02.txt AC 45 ms 8792 KiB
test_03.txt AC 43 ms 8120 KiB
test_04.txt AC 47 ms 8588 KiB
test_05.txt AC 43 ms 8088 KiB
test_06.txt AC 45 ms 8660 KiB
test_07.txt AC 47 ms 8728 KiB
test_08.txt AC 2 ms 3412 KiB
test_09.txt AC 2 ms 3524 KiB
test_10.txt AC 2 ms 3420 KiB
test_11.txt AC 54 ms 23988 KiB
test_12.txt AC 35 ms 8664 KiB
test_13.txt AC 27 ms 8852 KiB
test_14.txt AC 26 ms 6628 KiB
test_15.txt AC 15 ms 5220 KiB
test_16.txt AC 19 ms 5684 KiB
test_17.txt AC 27 ms 7600 KiB
test_18.txt AC 22 ms 6012 KiB
test_19.txt AC 14 ms 5460 KiB
test_20.txt AC 20 ms 6540 KiB
test_21.txt AC 22 ms 7032 KiB