Submission #1243762

#TimeUsernameProblemLanguageResultExecution timeMemory
1243762adriines06이상적인 도시 (IOI12_city)C++20
32 / 100
1095 ms2884 KiB
#include<bits/stdc++.h>
using namespace std;

int DistanceSum(int N, int *X, int *Y) {
  map<pair<int,int>,int>mp;
  vector<vector<int>>adj(N);
  for(int i=0;i<N;i++){
    mp[{X[i],Y[i]}]=i;
  }
  for(auto p: mp){
    int x=p.first.first, y=p.first.second;
    int u=p.second;
    if(mp.count({x+1,y})) adj[u].push_back(mp[{x+1,y}]);
    if(mp.count({x-1,y})) adj[u].push_back(mp[{x-1,y}]);
    if(mp.count({x,y+1})) adj[u].push_back(mp[{x,y+1}]);
    if(mp.count({x,y-1})) adj[u].push_back(mp[{x,y-1}]);
  }
  int ans=0;
  for(int i=0;i<N;i++){
    vector<int>dis(N,-1);
    queue<int>q;
    q.push(i);
    dis[i]=0;
    while(!q.empty()){
      int u=q.front();
      q.pop();
      for(int v: adj[u]){
        if(dis[v]==-1){
          dis[v]=dis[u]+1;
          q.push(v);
        }
      }
    }
    for(int j=i+1;j<N;j++){
      ans+=dis[j];
    }
  }

  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...