50112. Apartments and Friends

難度:3.5/5

Second Try: 3/5 Used Time: 9:45

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <ctype.h>

#define min(x,y) ((x)<(y)?(x):(y))
#define abs(x) ((x)<(0)?(-(x)):(x))

int n, m;
char friends[11][11] = {0};
char f_cnt[11] = {0};
int min_dis = INT_MAX;

void dfs(int idx[], int now_cnt, int now_dis){
if(now_dis > min_dis) return;
if(now_cnt == n) min_dis = min(min_dis, now_dis);
else{
for(int i = 0; i < n; i++){
if(idx[i] != -1) continue;

idx[i] = now_cnt;
int add_dis = 0;
for(int j = 0; j < f_cnt[i]; j++){
if(idx[friends[i][j]] != -1) add_dis += now_cnt - idx[friends[i][j]];
}
dfs(idx, now_cnt + 1, now_dis + add_dis);
idx[i] = -1;
}
}
}

int main(){
scanf("%d %d", &n, &m);
for(int i = 0; i < m; i++){
int a, b; scanf("%d %d", &a, &b);
friends[a][f_cnt[a]++] = b;
friends[b][f_cnt[b]++] = a;
}

int idx[11] = {0};
for(int i = 0; i < n; i++) idx[i] = -1;
dfs(idx, 0, 0);
printf("%d\n", min_dis);

}


50112. Apartments and Friends
https://aaronlin1229.github.io/judgegirl_50112/
Author
Akizumi
Posted on
July 17, 2023
Licensed under