제출 #805032

#제출 시각아이디문제언어결과실행 시간메모리
805032aymanrs이상적인 도시 (IOI12_city)C++14
0 / 100
1071 ms3072 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));
		for(int j = 0;j < i;j++) d[j] = 1;
		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;
					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...