답안 #131658

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
131658 2019-07-17T11:50:04 Z fefe 이상적인 도시 (IOI12_city) C++17
100 / 100
78 ms 8784 KB
#include<bits/stdc++.h>
#define MAX_N 100005
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define all(v) (v).begin(),(v).end()
using namespace std;
typedef pair<int,int> pii;
int n,m;
int cnt[MAX_N],num[MAX_N];
long long ans;
vector<int> adj[MAX_N];
vector<pii> V;
bool vis[MAX_N];
int dfs(int x){
	vis[x]=true;
	int sum = cnt[x];
	for(int y:adj[x]){
	
		if(vis[y]){
			continue;
		}
		
		sum+=dfs(y);
	}
	ans = (ans + (long long) sum * (n-sum)) % 1000000000LL;
	return sum;
}
void solve(){
	int i;
	sort(all(V));
	
	for(i=0;i<n;i++){
		int e=i;
		while(e<n-1 && V[e].fi == V[e+1].fi && V[e].se + 1 == V[e+1].se)	e++;	
		m++;
		for(int j=i;j<=e;j++){
			int x=lower_bound(all(V),make_pair(V[j].fi-1,V[j].se))-V.begin();
			if(V[x] == make_pair(V[j].fi-1,V[j].se)){
				adj[m].eb(num[x]);
				adj[num[x]].eb(m);
			}
			num[j]=m;
			cnt[m]++;
		}		
		i=e;
	}
	
	dfs(1);
	for(i=0;i<n;i++)	num[i]=vis[i]=0;
	for(i=1;i<=m;i++){
		cnt[i]=0;
		adj[i].clear();adj[i].resize(0);
		
	}
	m=0;
	
}
int DistanceSum(int N, int *X, int *Y) {
	
	n=N;
	
	int i;
	
	for(i=0;i<n;i++){
		V.eb(X[i],Y[i]);
	}
	solve();
	
	for(i=0;i<n;i++){
		swap(V[i].fi,V[i].se);
	}
	solve();
	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
2 Correct 4 ms 2680 KB Output is correct
3 Correct 4 ms 2680 KB Output is correct
4 Correct 4 ms 2684 KB Output is correct
5 Correct 4 ms 2680 KB Output is correct
6 Correct 4 ms 2680 KB Output is correct
7 Correct 4 ms 2680 KB Output is correct
8 Correct 4 ms 2680 KB Output is correct
9 Correct 4 ms 2680 KB Output is correct
10 Correct 4 ms 2680 KB Output is correct
11 Correct 4 ms 2680 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 2808 KB Output is correct
2 Correct 5 ms 2680 KB Output is correct
3 Correct 5 ms 2808 KB Output is correct
4 Correct 5 ms 2808 KB Output is correct
5 Correct 6 ms 2936 KB Output is correct
6 Correct 5 ms 2808 KB Output is correct
7 Correct 5 ms 2808 KB Output is correct
8 Correct 5 ms 2808 KB Output is correct
9 Correct 6 ms 2808 KB Output is correct
10 Correct 5 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 17 ms 3444 KB Output is correct
2 Correct 17 ms 3828 KB Output is correct
3 Correct 34 ms 4728 KB Output is correct
4 Correct 35 ms 5164 KB Output is correct
5 Correct 65 ms 6928 KB Output is correct
6 Correct 67 ms 7792 KB Output is correct
7 Correct 67 ms 7668 KB Output is correct
8 Correct 65 ms 6784 KB Output is correct
9 Correct 67 ms 7280 KB Output is correct
10 Correct 68 ms 8784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 3572 KB Output is correct
2 Correct 19 ms 3700 KB Output is correct
3 Correct 40 ms 5040 KB Output is correct
4 Correct 38 ms 5108 KB Output is correct
5 Correct 77 ms 7452 KB Output is correct
6 Correct 74 ms 7536 KB Output is correct
7 Correct 78 ms 7664 KB Output is correct
8 Correct 72 ms 7392 KB Output is correct
9 Correct 71 ms 7280 KB Output is correct
10 Correct 72 ms 7408 KB Output is correct