#include <iostream>
#include <queue>
using namespace std;
queue<int> answer;
// matrixμ μΉκ΅¬ κ΄κ³, pairedμ μΉκ΅¬κ° μλμ§ μ¬λΆ μ μ₯
int matrix[10][10];
int paired[10];
int student_num, pair_num;
int makePair() {
// μ§μ΄ μλ νμμ΄ μλ€λ©΄ idxμ μ μ₯νκ³ , λͺ¨λ μ§μ΄ μλ€λ©΄ 1μ λ°ν
int idx = -1;
for (int i = 0; i < student_num; i++)
if (paired[i] == -1) {
idx = i;
break;
}
if (idx == -1) return 1;
// μ§μ΄ μκ³ , μΉκ΅¬μΈ νμμ μ°Ύμλ€λ©΄ μ°κ²°μν€κ³ μ¬κ· νΈμΆ
int result = 0;
for (int i = idx + 1; i < student_num; i++)
if (paired[i] == -1 && matrix[idx][i] == 1) {
paired[idx] = 1;
paired[i] = 1;
result += makePair();
// ν΄λΉ ν¨μκ° λ°κΎΌ λ°°μ΄μ μλλλ‘ λλ리며 λ°ν
paired[idx] = -1;
paired[i] = -1;
}
return result;
}
int main() {
int t;
cin >> t;
while (t > 0) {
cin >> student_num >> pair_num;
for (int i = 0; i < 10; i++) {
paired[i] = -1;
for (int j = 0; j < 10; j++)
matrix[i][j] = -1;
}
for (int i = 0; i < pair_num; i++){
int a, b;
cin >> a >> b;
matrix[a][b] = 1;
matrix[b][a] = 1;
}
answer.push(makePair(n));
t--;
}
while (!answer.empty()) {
cout << answer.front() << endl;
answer.pop();
}
return 0;
}
μλ₯Ό λ€μ΄ makePair ν¨μ A1μ΄ A2, A3λ₯Ό μ°¨λ‘λλ‘ νΈμΆνλ€κ³ κ°μ ν΄λ³΄μ.
βA2μ κ·Έκ²μ΄ μ¬κ·νΈμΆν ν¨μλ€μ΄ paired[]μ κ°μ λ³κ²½νμ κ²μ΄λ€. νμ§λ§ μ¬κΈ°μ paired[]κ° μ μλ³μ μ΄λ―λ‘, A2 κ° κ°μ λ°ννκ³ A3κ° νΈμΆ λ λλ, A1μνμμμ paired[]κ° μλ A2 κ° λͺ½λ λ€μ§λ©° κ°μ μμ paired[]κ° μκ² λλ€. λ°λΌμ A2 ν¨μκ° λ°ννλ©° μμ μ΄ λ³κ²½ν κ°μ μλλλ‘ λ€μ κ³ μ³μΌ ν¨μ μ μ μλ€.
μ΄ λ ν¨μ μ½λμ "λ³κ²½ >> μ¬κ· νΈμΆ >> μμ 볡κ·" μ ν¨ν΄μ λ£μΌλ©΄, μ¬κ·κ° κΉμ΄ λ€μ΄κ°λ€ λμλ λ€μ μλ§μ μμ μμ μ¬κ·νμμ ν μ μλ€.
ββ» paired[] μ ν¨μμ 맀κ°λ³μλ‘ μ λ¬ν΄ ꡬννλ©΄ μ λ¬Έμ λ₯Ό κ³ λ €νμ§ μμλ λ κ²μ΄λ€.
'π > μ½λ©ν μ€νΈ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μκ³ λ¦¬μ¦] μΉ΄λΌμΆλ°μ λΉ λ₯Έ κ³±μ (Karatsuba) (1) | 2020.07.28 |
---|---|
[μκ³ λ¦¬μ¦] λΆν μ 볡(Divide & Conquer) (0) | 2020.07.28 |
[μκ³ λ¦¬μ¦] μμ νμ(CLOCKSYNC) (0) | 2020.07.28 |
[μκ³ λ¦¬μ¦] μμ νμ(BOARDCOVER) (0) | 2020.07.28 |
[μκ³ λ¦¬μ¦] 무μνκ² νκΈ°(Brute-Force) (0) | 2020.07.28 |