Submission #2717377


Source Code Expand

#include <bits/stdc++.h>
#define INF 1000000000
#define debug(x) cerr << #x << ": " << x << '\n';
using namespace std;
using ll = long long;
using P = pair<int, int>;

class UnionFindTree{
	private:
		int N;
		unique_ptr<int[]> parent;
		unique_ptr<int[]> rank;
		unique_ptr<int[]> size;
	public:
		UnionFindTree(int N){
			this -> N = N;
			this -> parent = make_unique<int[]>(N);
			this -> rank = make_unique<int[]>(N);
			this -> size = make_unique<int[]>(N);
			for(int i = 0; i < (int) N; i++){
				parent[i] = i; rank[i] = 0; size[i] = 1;
			}
		}
		void init(){
			for(int i = 0; i < (int) N; i++){
				parent[i] = i; rank[i] = 0; size[i] = 1;
			}
		}
		int find(int x){
			if(parent[x] == x) return x;
			else return parent[x] = find(parent[x]);
		}
		void unite(int x, int y){
			x = find(x); y = find(y);
			if(x == y) return;

			if(rank[x] < rank[y]){
				parent[x] = y;
				size[y] += size[x];
			}else{
				parent[y] = x;
				size[x] += size[y];
				if(rank[x] == rank[y]) rank[x]++;
			}
		}
		bool same(int x, int y){
			return find(x) == find(y);
		}
		int count(int x){
			return size[find(x)];
		}
};

struct edge{
	int from, to;
	int point;
};


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

int main(void){
	int H, W; cin >> H >> W;
	int sx, sy, gx, gy; cin >> sx >> sy >> gx >> gy;
	int p[100][100];
	ll res = 0;
	for(int i = 0; i < H; i++){
		for(int j = 0; j < W; j++){
			cin >> p[j][i];
			res += p[j][i];
		}
	}

	int dx[] = {0, 1};
	int dy[] = {1, 0};
	vector<edge> G;
	for(int i = 0; i < H; i++){
		for(int j = 0; j < W; j++){
			for(int k = 0; k < 2; k++){
				int nx = j+dx[k], ny = i+dy[k];
				if(nx<W and ny<H){
					edge e = {W*i+j, W*ny+nx, p[j][i]*p[nx][ny]};
					G.push_back(e);
				}
			}
		}
	}

	UnionFindTree uf(H*W);
	sort(begin(G), end(G), comp);
	for(int i = 0; i < (int)G.size(); i++){
		edge e = G[i];
		if(not uf.same(e.from, e.to)){
			uf.unite(e.from, e.to);
			res += e.point;
		}
	}

	cout << res << '\n';

	return 0;
}

Submission Info

Submission Time
Task D - Game on a Grid
User yna87
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2108 Byte
Status AC
Exec Time 5 ms
Memory 832 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 832 KB
subtask1_08.txt AC 5 ms 832 KB
subtask1_09.txt AC 5 ms 832 KB
subtask1_10.txt AC 5 ms 832 KB
subtask1_11.txt AC 5 ms 832 KB
subtask1_12.txt AC 5 ms 832 KB
subtask1_13.txt AC 5 ms 832 KB
subtask1_14.txt AC 5 ms 832 KB
subtask1_15.txt AC 5 ms 832 KB
subtask1_16.txt AC 5 ms 832 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 832 KB
subtask1_21.txt AC 5 ms 832 KB
subtask1_22.txt AC 5 ms 832 KB
subtask1_23.txt AC 5 ms 832 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