Submission #4018623


Source Code Expand

#include<iostream>
#include<cmath>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;

const int MAX_N = 1e4 + 1;
int H, W;
int P[101][101];
bool used[MAX_N];
int par[MAX_N];
int UFTrank[MAX_N];
int Sx, Sy, Gx, Gy;
void init(int n) {
   for (int i = 0; i < n; i++) {
      par[i] = i;
      UFTrank[i] = 0;
   }
}

int find(int x) {
   if (par[x] == x) {
      return x;
   } else {
      return par[x] = find(par[x]);
   }
}

void unite(int x, int y) {
   x = find(x);
   y = find(y);
   if (x == y) return;

   if (UFTrank[x] < UFTrank[y]) {
      par[x] = y;
   } else {
      par[y] = x;
      if (UFTrank[x] == UFTrank[y]) UFTrank[x]++;
   }
}

bool same(int x, int y) {
   return find(x) == find(y);
}       

struct edge { int u, v, cost; };

bool comp(const edge& e1, const edge& e2) {
   return e1.cost > e2.cost;
}

edge es[MAX_N * 2];

int main() {
   cin >> H >> W;
   int V = H * W;
   cin >> Sx >> Sy;
   cin >> Gx >> Gy;
   int sum = 0;
   for (int h = 0; h < H; h++) {
      for (int w = 0; w < W; w++) {
         cin >> P[h][w];
         sum += P[h][w];
      }
   }

   int E = 0;
   for (int h = 0; h < H; h++) {
      for (int w = 0; w < W - 1; w++) {
         es[E].u = h * W + w;
         es[E].v = h * W + w + 1;
         es[E].cost = P[h][w] * P[h][w + 1];
         E++;
      }
   }
   for (int h = 0; h < H - 1; h++) {
      for (int w = 0; w < W; w++) {
         es[E].u = h * W + w;
         es[E].v = (h + 1) * W + w;
         es[E].cost = P[h][w] * P[h + 1][w];
         E++;
      }
   }
   
   sort(es, es + E, comp);
   init(V);
   int ans = 0;
   memset(used, false, sizeof(used));
   for (int i = 0; i < E; i++) {
      edge e = es[i];
      // cout << i << " " << e.u << " " << e.v << " " << e.cost << endl;
      if (!same(e.u, e.v)) {
         unite(e.u, e.v);
         ans += e.cost;
      }
   }
   ans += sum;
   cout << ans << endl;
   return 0;
}

Submission Info

Submission Time
Task D - Game on a Grid
User redultimate
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2055 Byte
Status AC
Exec Time 5 ms
Memory 640 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 32
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 256 KB
subtask0_sample_02.txt AC 1 ms 256 KB
subtask0_sample_03.txt AC 1 ms 256 KB
subtask1_01.txt AC 1 ms 256 KB
subtask1_02.txt AC 1 ms 256 KB
subtask1_03.txt AC 1 ms 256 KB
subtask1_04.txt AC 1 ms 256 KB
subtask1_05.txt AC 1 ms 256 KB
subtask1_06.txt AC 1 ms 256 KB
subtask1_07.txt AC 5 ms 640 KB
subtask1_08.txt AC 5 ms 640 KB
subtask1_09.txt AC 5 ms 640 KB
subtask1_10.txt AC 5 ms 640 KB
subtask1_11.txt AC 5 ms 640 KB
subtask1_12.txt AC 5 ms 640 KB
subtask1_13.txt AC 5 ms 640 KB
subtask1_14.txt AC 5 ms 640 KB
subtask1_15.txt AC 5 ms 640 KB
subtask1_16.txt AC 5 ms 640 KB
subtask1_17.txt AC 1 ms 256 KB
subtask1_18.txt AC 1 ms 256 KB
subtask1_19.txt AC 1 ms 256 KB
subtask1_20.txt AC 4 ms 640 KB
subtask1_21.txt AC 4 ms 640 KB
subtask1_22.txt AC 4 ms 640 KB
subtask1_23.txt AC 4 ms 640 KB
subtask1_24.txt AC 1 ms 256 KB
subtask1_25.txt AC 1 ms 256 KB
subtask1_26.txt AC 1 ms 256 KB
subtask1_27.txt AC 1 ms 256 KB
subtask1_28.txt AC 1 ms 256 KB
subtask1_29.txt AC 1 ms 256 KB