Submission #3149196


Source Code Expand

// {{{
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <complex>
#include <vector>
#include <list>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <algorithm>
#include <numeric>
using namespace std;

#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define FOR(i, a, b) for(size_t i = static_cast<size_t>(a); i < static_cast<size_t>(b); i++)
#define FORR(i, a, b) for(size_t i = static_cast<size_t>(a); i >= static_cast<size_t>(b); i--)
#define REP(i, n) for(size_t i = 0; i < static_cast<size_t>(n); i++)
#define REPR(i, n) for(size_t i = static_cast<size_t>(n); i >= 0; i--)
#define ALL(x) (x).begin(), (x).end()

typedef long long ll;
typedef pair<int, int> P;
typedef pair<ll, ll> LP;
typedef pair<int, P> IP;
typedef pair<ll, LP> LLP;

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

constexpr int INF = 100000000;
constexpr ll LINF = 10000000000000000ll;
constexpr int MOD = static_cast<int>(1e9 + 7);
constexpr double EPS = 1e-9;
// }}}

class UnionFind{
    vector<size_t> m_parents;
    vector<ll> m_ranks;

public:
    UnionFind(size_t n){
        m_parents.resize(n);
        m_ranks.resize(n);
        for(size_t i = 0; i < n; i++){
            m_parents[i] = i;
            m_ranks[i] = 0;
        }
    }

    size_t root(size_t x){
        if(m_parents[x] == x) return x;
        size_t r = root(m_parents[x]);
        m_parents[x] = r;
        return r;
    }

    bool isSame(size_t x, size_t y){
        return root(x) == root(y);
    }

    void unite(size_t x, size_t y){
        size_t rx = root(x);
        size_t ry = root(y);
        if(rx != ry){
            if(m_ranks[rx] < m_ranks[ry]) swap(rx, ry);
            if(m_ranks[rx] == m_ranks[ry]) m_ranks[rx]++;
            m_parents[ry] = rx;
        }
    }
};

int H, W;
int V = 10000;
P s, g;
int sum;
int m[101][101];
struct edge {
    int u, v, cost;
    edge(): u(0), v(0), cost(0) {};
    edge(int u_, int v_): u(u_), v(v_) {
        int ux = u / 100;
        int uy = u % 100;
        int vx = v / 100;
        int vy = v % 100;
        cost = m[ux][uy]*m[vx][vy];
    };

    friend ostream& operator<<(ostream &os, const edge &e){
        int ux = e.u / 100;
        int uy = e.u % 100;
        int vx = e.v / 100;
        int vy = e.v % 100;
        os << "(" << ux << ", " << uy << ") "
           << "(" << vx << ", " << vy << ") "
           << e.cost;
        return os;
    };
};
vector<edge> es;

void init()
{
}

bool comp(const edge &lhs, const edge &rhs)
{
    return lhs.cost > rhs.cost;
}
ll kruskal()
{
    sort(es.begin(), es.end(), comp);
    UnionFind uf(V);
    ll ret = 0;
    int E = es.size();
    REP(i, E){
        edge e = es[i];
        if(!uf.isSame(e.u, e.v)){
            uf.unite(e.u, e.v);
            ret += e.cost;
        }
    }
    return ret;
}

void solve()
{
    ll val = kruskal();
    cout << sum + val << endl;
}

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin >> H >> W;
    cin >> s.fi >> s.se;
    cin >> g.fi >> g.se;
    s.fi--; s.se--;
    g.fi--; g.se--;
    REP(i, W){
        REP(j, H){
            cin >> m[i][j];
            sum += m[i][j];
            REP(k, 4){
                int nx = i + dx[k];
                int ny = j + dy[k];
                if(nx < 0 || W <= nx || ny < 0 || H <= ny) continue;
                edge e = edge(i*100+j, nx*100+ny);
                es.pb(e);
            }
        }
    }
    solve();
    return 0;
}

// vim:set foldmethod=marker:

Submission Info

Submission Time
Task D - Game on a Grid
User rrrccc
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3726 Byte
Status WA
Exec Time 5 ms
Memory 1148 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 100
Status
AC × 3
AC × 28
WA × 4
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt
All subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 1 ms 384 KB
subtask0_sample_02.txt AC 1 ms 384 KB
subtask0_sample_03.txt AC 1 ms 384 KB
subtask1_01.txt AC 1 ms 384 KB
subtask1_02.txt AC 1 ms 384 KB
subtask1_03.txt AC 1 ms 384 KB
subtask1_04.txt AC 1 ms 384 KB
subtask1_05.txt AC 1 ms 384 KB
subtask1_06.txt AC 1 ms 384 KB
subtask1_07.txt AC 5 ms 1148 KB
subtask1_08.txt AC 5 ms 1148 KB
subtask1_09.txt AC 5 ms 1148 KB
subtask1_10.txt AC 5 ms 1148 KB
subtask1_11.txt AC 5 ms 1148 KB
subtask1_12.txt AC 5 ms 1148 KB
subtask1_13.txt AC 5 ms 1148 KB
subtask1_14.txt AC 5 ms 1148 KB
subtask1_15.txt AC 5 ms 1148 KB
subtask1_16.txt AC 4 ms 1148 KB
subtask1_17.txt WA 1 ms 384 KB
subtask1_18.txt WA 1 ms 512 KB
subtask1_19.txt WA 1 ms 384 KB
subtask1_20.txt AC 4 ms 1148 KB
subtask1_21.txt AC 5 ms 1148 KB
subtask1_22.txt AC 5 ms 1148 KB
subtask1_23.txt AC 5 ms 1148 KB
subtask1_24.txt AC 1 ms 384 KB
subtask1_25.txt AC 1 ms 384 KB
subtask1_26.txt AC 1 ms 484 KB
subtask1_27.txt WA 1 ms 384 KB
subtask1_28.txt AC 1 ms 512 KB
subtask1_29.txt AC 1 ms 384 KB