제출 #805039

#제출 시각아이디문제언어결과실행 시간메모리
805039aymanrsIdeal city (IOI12_city)C++14
32 / 100
1079 ms2912 KiB
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1e9;
int DistanceSum(int N, int *X, int *Y){
	vector<int> g[N];
	map<pair<int, int>, int> s;
	for(int i = 0;i < N;i++){
		auto p = s.find({X[i]-1, Y[i]});
		if(p != s.end()) {
			g[i].push_back(p->second);
			g[p->second].push_back(i);
		}
		p = s.find({X[i]+1, Y[i]});
		if(p != s.end()) {
			g[i].push_back(p->second);
			g[p->second].push_back(i);
		}
		p = s.find({X[i], Y[i]-1});
		if(p != s.end()) {
			g[i].push_back(p->second);
			g[p->second].push_back(i);
		}
		p = s.find({X[i], Y[i]+1});
		if(p != s.end()) {
			g[i].push_back(p->second);
			g[p->second].push_back(i);
		}
		s[{X[i], Y[i]}] = i;
	}
	long long ans = 0;
	int D[N];
	for(int i = 0;i < N;i++){
    memset(D, 0, sizeof(D));
		queue<int> q;
		q.push(i);
		while(!q.empty()){
			int t = q.front();
			q.pop();
			for(int j : g[t]){
				if(j != i && !D[j]){
					D[j] = D[t]+1;
					if(j > i) ans = (ans+D[j])%MOD;
					q.push(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...