Hello Ocean! ๐ŸŒผ

[๋ฐฑ์ค€/C++] 19535. ใ„ทใ„ทใ„ทใ…ˆ ๋ณธ๋ฌธ

Algorithm

[๋ฐฑ์ค€/C++] 19535. ใ„ทใ„ทใ„ทใ…ˆ

bba_dda 2021. 7. 13. 21:38
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

https://www.acmicpc.net/problem/19535

ํ’€์ด

ใ„ท ํŠธ๋ฆฌ : (n๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(a ์ œ์™ธ)) - (n) - (n๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(a)) - (a์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ(n ์ œ์™ธ))

๋”ฐ๋ผ์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ(n)์— ๋Œ€ํ•ด์„œ, 

n๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ x๊ฐœ๋ผ๊ณ  ํ•˜๊ณ , 

n๊ณผ ์—ฐ๊ฒฐ๋œ ์–ด๋–ค ๋…ธ๋“œ a์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ y๊ฐœ๋ผ๊ณ  ํ•˜๋ฉด, 

(x-1) * (y-1) ์˜ ํ•ฉ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

* ์ค‘๋ณต์„ ๋ง‰๊ธฐ ์œ„ํ•ด, n์ด a๋ณด๋‹ค ๋…ธ๋“œ๋ฒˆํ˜ธ๊ฐ€ ํฐ ๊ฒฝ์šฐ๋งŒ ์…ˆ

 

ใ…ˆ ํŠธ๋ฆฌ : (n) - (n๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ 3๊ฐœ)

๋”ฐ๋ผ์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”,

์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ a๊ฐ€ 3 ์ด์ƒ์ธ ๋…ธ๋“œ n์— ๋Œ€ํ•ด์„œ aC3 ์˜ ์ด ํ•ฉ์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. 

์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

int N;

vector<int> tree[300003];

long long count_d = 0;
long long count_g = 0;

void find_g() {
	// ์ž์‹์ด 3๊ฐœ ์ด์ƒ์ธ ๋…ธ๋“œ์—์„œ, ์ž์‹์ˆ˜๊ฐ€ a๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, aC3 ๊ฐœ์ˆ˜ ์„ธ๊ธฐ 
	for (int n = 1;n <= N;n++) {
		int cnt = tree[n].size(); // ์ž์‹ ๊ฐœ์ˆ˜
		if (cnt >=3) 
			count_g += (cnt*(cnt - 1)*(cnt - 2)) / 6;
	}
}
// n์˜ ์ž์‹or๋ถ€๋ชจ - n - tree[n][i] - tree[n][i]์˜ ์ž์‹or๋ถ€๋ชจ 
// n์˜ ์ž์‹or๋ถ€๋ชจ์—์„œ tree[n][i]๋Š” ๋นผ์ค˜์•ผ ํ•˜๋ฏ€๋กœ -1 (1)
// tree[n][i]์˜ ์ž์‹or๋ถ€๋ชจ์—์„œ n์€ ๋นผ์ค˜์•ผ ํ•˜๋ฏ€๋กœ -1 (2)
// ๊ฒฝ์šฐ์˜์ˆ˜ ๊ณ„์‚ฐ : (1)*(2)
void find_d() { 
	for (int n = 1;n <= N;n++) {
		if (tree[n].size() < 2) continue;
		for (int i = 0;i < tree[n].size();i++) {
			if (tree[n][i] < n) continue;
			if (tree[tree[n][i]].size() < 2) continue;
			count_d += ((tree[n].size()-1)*(tree[tree[n][i]].size()-1));
		}
	}
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> N;
	for (int i = 1;i < N;i++) { // ๊ฐ„์„  N-1๊ฐœ ์ž…๋ ฅ๋ฐ›๊ธฐ 
		int u, v;
		cin >> u >> v;
		tree[u].push_back(v);
		tree[v].push_back(u);	
	}
	
	find_d();
	find_g();
	//cout << count_d << " " << count_g << endl;
	if (count_d > count_g * 3) cout << "D";
	else if (count_d == count_g * 3) cout << "DUDUDUNGA";
	else cout << "G";

	return 0;
}

๊ฒฐ๊ณผ

๋ฐ˜์‘ํ˜•