Submission #3791976


Source Code Expand

#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = int(a); i < int(b); i++)
#define rer(i, a, b) for(int i = int(a) - 1; i >= int(b); i--)

using namespace std;
typedef long long int ll;
const int MAX_V=10010;
int par[MAX_V]; //親
int height[MAX_V];  //木の深さ

//n要素で初期化
void init (int n){
    for (int i=0;i<n;i++){
        par[i]=i;
        height[i]=0;
    }
}

//木の根を求める
int find (int x){
    if (par[x]==x){
        return x;
    }
    else{
        return par[x] = find(par[x]);
    }
}

//xとyの属する集合を併合
void unite (int x, int y){
    x=find(x);
    y=find(y);
    if (x==y) return;
    
    if (height[x] < height[y]){
        par[x]=y;
    }
    else {
        par[y]=x;
        if (height[x]==height[y]) height[x]++;
    }
}

//xとyが同じ集合に属するか否か
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;
}

vector<edge> es;
int V, E/*, p[100][100]*/;

int kruscal(){
    sort(es.begin(), es.begin()+E, comp); //edge.costが小さい順にソート
    init(V);
    int res=0;
    rep(i,0,E){
        edge e=es[i];
        if (!same(e.u, e.v)){
            unite(e.u, e.v);
            res+=e.cost;
        }
    }
    return res;
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int H,W,Sx,Sy,Gx,Gy;
    cin>>H>>W;
    cin>>Sx>>Sy;
    cin>>Gx>>Gy;
    Sx--;Sy--;Gx--;Gy--;
    int sum=0;
    int p[H][W];
    rep(i,0,H){
        rep(j,0,W){
            cin>>p[i][j];
            sum+=p[i][j];
        }
    }
    V=H*W;
    E=2*V-H-W;
    rep(i,0,H){
        rep(j,0,W-1){
            es.push_back(edge{W*i+j,W*i+j+1,p[i][j]*p[i][j+1]});
        }
    }
    rep(i,0,H-1){
        rep(j,0,W){
            es.push_back(edge{W*i+j,W*i+j+W,p[i][j]*p[i+1][j]});
        }
    }
    cout<<kruscal()+sum<<"\n";
}

Submission Info

Submission Time
Task D - Game on a Grid
User yuki1997
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2029 Byte
Status AC
Exec Time 4 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 4 ms 832 KB
subtask1_08.txt AC 4 ms 832 KB
subtask1_09.txt AC 4 ms 832 KB
subtask1_10.txt AC 4 ms 832 KB
subtask1_11.txt AC 4 ms 832 KB
subtask1_12.txt AC 4 ms 832 KB
subtask1_13.txt AC 4 ms 832 KB
subtask1_14.txt AC 4 ms 832 KB
subtask1_15.txt AC 4 ms 832 KB
subtask1_16.txt AC 3 ms 832 KB
subtask1_17.txt AC 2 ms 256 KB
subtask1_18.txt AC 2 ms 256 KB
subtask1_19.txt AC 2 ms 256 KB
subtask1_20.txt AC 3 ms 832 KB
subtask1_21.txt AC 4 ms 832 KB
subtask1_22.txt AC 4 ms 832 KB
subtask1_23.txt AC 4 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