Submission #377939


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
typedef long long ll;
const int INF = 1e9;

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

struct UnionFind {
    vector<int> data;
    UnionFind(int size) : data(size, -1) { }
    bool unite(int x, int y) {
        x = root(x); y = root(y);
        if (x != y) {
            if (data[y] < data[x]) swap(x, y);
            data[x] += data[y]; data[y] = x;
        }
        return x != y;
    }
    bool same(int x, int y) {
        return root(x) == root(y);
    }
    int root(int x) {
        return data[x] < 0 ? x : data[x] = root(data[x]);
    }
    int size(int x) {
        return -data[root(x)];
    }
};

struct edge{
    int u,v;
    int cost;
    bool operator<(const edge& e)const{
        return cost > e.cost;
    }
};

class Kruskal{
public:
    UnionFind uf;
    vector<edge> es;
    int V;
    Kruskal(int V,vector<edge> es):uf(V),es(es){}
    int exec(){
        sort(es.begin(),es.end());
        ll res = 0;
        for(int i=0;i<es.size();i++){
            edge e = es[i];
            if(!uf.same(e.u,e.v)){
                uf.unite(e.u,e.v);
                res += e.cost;
            }
        }
        return res;
    }
};

int transgraph(int x,int y,int w){
	return (y*w)+x;
}

int main(void) {
	int h,w;
	int sx,sy,gx,gy;
	cin >> h >> w;
	cin >> sx >> sy >> gx >> gy;
	vector<vector<int>> p(h,vector<int>(w));
	ll sum = 0;
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			cin >> p[i][j];
			sum += p[i][j];
		}
	}
	vector<edge> es(w*h+1);
	for(int i=0;i<h;i++){
		for(int j=0;j<w;j++){
			for(int k=0;k<4;k++){
				int nx = j + dx[k],ny = i + dy[k];
				if(nx < 0 || ny < 0 || nx >= w || ny >= h)continue;
				int v = transgraph(j,i,w),nv = transgraph(nx,ny,w);
				int c = p[i][j]*p[ny][nx];
				es.push_back(edge{v,nv,c});
			}
		}
	}
	Kruskal kruskal(w*h+1,es);
	cout << kruskal.exec()+sum << endl;


	return 0;
}

Submission Info

Submission Time
Task D - Game on a Grid
User tkzw_21
Language C++11 (GCC 4.9.2)
Score 100
Code Size 2029 Byte
Status AC
Exec Time 41 ms
Memory 2664 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 26 ms 808 KB
subtask0_sample_02.txt AC 35 ms 736 KB
subtask0_sample_03.txt AC 25 ms 764 KB
subtask1_01.txt AC 24 ms 800 KB
subtask1_02.txt AC 25 ms 804 KB
subtask1_03.txt AC 25 ms 800 KB
subtask1_04.txt AC 24 ms 808 KB
subtask1_05.txt AC 25 ms 928 KB
subtask1_06.txt AC 26 ms 796 KB
subtask1_07.txt AC 40 ms 2648 KB
subtask1_08.txt AC 41 ms 2656 KB
subtask1_09.txt AC 39 ms 2648 KB
subtask1_10.txt AC 40 ms 2656 KB
subtask1_11.txt AC 40 ms 2664 KB
subtask1_12.txt AC 40 ms 2660 KB
subtask1_13.txt AC 39 ms 2588 KB
subtask1_14.txt AC 39 ms 2652 KB
subtask1_15.txt AC 38 ms 2648 KB
subtask1_16.txt AC 36 ms 2656 KB
subtask1_17.txt AC 26 ms 800 KB
subtask1_18.txt AC 26 ms 800 KB
subtask1_19.txt AC 26 ms 928 KB
subtask1_20.txt AC 36 ms 2648 KB
subtask1_21.txt AC 37 ms 2652 KB
subtask1_22.txt AC 37 ms 2664 KB
subtask1_23.txt AC 37 ms 2652 KB
subtask1_24.txt AC 25 ms 800 KB
subtask1_25.txt AC 25 ms 804 KB
subtask1_26.txt AC 26 ms 932 KB
subtask1_27.txt AC 24 ms 924 KB
subtask1_28.txt AC 25 ms 920 KB
subtask1_29.txt AC 25 ms 804 KB