UVA 10160 Servicing Stations

本文介绍了一个算法,用于解决在一个由多个城镇组成的网络中如何最小化服务站数量的问题,确保每个城镇都能够直接或通过相邻城镇获得服务。算法通过深度优先搜索进行回溯,考虑每个城镇是否需要建立服务站。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析

给定一些城镇和相邻关系,如果要建造服务站,服务站只能服务建造地所在的城镇和其相邻的城镇,问最少要建几个服务站?

对每一个城镇,判断是否需要在此处建造服务站,即相邻的城镇是否还需要建站。如果不需要则此处不建站(如该镇自身未建站则需建站)。继续判断下一个城镇。这里进行了一定剪枝,如果当前城镇之前的城镇未能享受服务,并且其相邻的最大城镇小于当前城镇,即不可能再使之前那个城镇享受到服务,所以这种安排是不可以的。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX_V 40
using std::sort;

int V, E, min;
int edge[MAX_V][MAX_V], top[MAX_V], vis[MAX_V];

void dfs(int p, int n, int s)
{
    if (n == V && s < min) { min = s; return; }
    if (p > V || s >= min) return;
    for (int i = 1; i < p; i++)
        if (!vis[i] && edge[i][top[i]-1] < p) return;

    int r = 0;
    for (int i = 0; i < top[p]; i++) {
        if (!vis[edge[p][i]]) r++;
        vis[edge[p][i]]++;
    }
    if (r) dfs(p + 1, n + r, s + 1);
    for (int i = 0; i < top[p]; i++)
        vis[edge[p][i]]--;
    dfs(p + 1, n, s);
}

void solve()
{
    for (int i = 1; i <= V; i++) {
        edge[i][top[i]++] = i;
        sort(edge[i], edge[i]+top[i]);
    }
    min = V;
    dfs(1, 0, 0);
    printf("%d\n", min);
}

int main()
{
    while (scanf("%d%d", &V, &E), (V + E)) {
        memset(edge, 0, sizeof(edge));
        memset(top, 0, sizeof(top));
        memset(vis, 0, sizeof(vis));
        int v1, v2;
        for (int i = 0; i < E; i++) {
            scanf("%d%d", &v1, &v2);
            edge[v1][top[v1]++] = v2;
            edge[v2][top[v2]++] = v1;
        }
        solve();
    }
    return 0;
}

题目

Description

A company offers personal computers for sale in N towns (3 ≤ N ≤ 35). The towns are denoted by 1, 2, … , N. There are direct routes connecting M pairs from among these towns. The company decides to build servicing stations in several towns, so that for any town X, there would be a station located either in X or in some immediately neighbouring town of X.

Write a program for finding out the minumum number of stations, which the company has to build, so that the above condition holds.

Input

The input consists of more than one description of town (but totally, less than ten descriptions). Every description starts with number N of towns and number M of pairs of towns directly connected each other. The integers N and M are separated by a space. Every one of the next M rows contains a pair of connected towns, one pair per row. The pair consists of two integers for town’s numbers, separated
by a space. The input ends with N = 0 and M = 0.

Output

For every town in the input write a line containing the obtained minimum.

Sample Input

8 12
1 2
1 6
1 8
2 3
2 6
3 4
3 5
4 5
4 7
5 6
6 7
6 8
12 51
12 10
7 12
2 8
1 12
9 12
11 3
11 7
4 12
3 4
2 3
5 3
2 5
10 1
7 2
1 6
6 5
6 8
4 11
8 7
3 7
11 2
11 9
3 10
9 5
8 9
8 10
4 10
7 6
5 8
1 5
4 7
4 6
4 5
2 10
2 4
6 11
11 12
12 8
8 3
11 10
10 5
7 9
9 6
2 6
7 5
1 2
4 8
3 9
10 7
6 3
1 8

25 251
24 25
22 17
19 20
9 23
25 10
9 17
5 15
1 12
20 16
4 15
12 11
11 23
15 10
21 24
15 20
10 13
23 22
4 3
25 21
18 14
22 5
11 14
15 18
11 15
4 8
15 23
13 1
4 13
7 16
18 24
25 6
6 12
17 4
19 22
2 20
16 21
7 1
9 19
10 1
16 17
24 5
12 22
24 17
20 13
15 7
6 21
23 24
19 21
16 19
21 14
25 23
3 20
23 13
8 15
7 6
2 19
11 19
3 25
21 23
9 12
7 13
6 11
12 8
14 9
20 7
3 17
24 6
12 3
5 7
5 21
25 9
13 16
18 25
15 12
2 5
2 17
4 20
4 7
7 17
13 24
21 2
17 10
8 7
10 18
17 12
14 7
25 4
7 25
2 24
9 21
10 6
21 11
11 9
18 12
19 3
9 20
15 2
25 11
22 21
14 19
8 10
8 17
20 10
2 1
6 8
18 17
6 3
22 3
6 5
18 3
18 9
24 19
23 12
19 17
20 18
10 24
22 24
3 7
17 23
18 23
2 3
17 11
22 6
24 11
22 16
6 15
5 9
6 23
5 16
4 1
19 15
21 10
11 7
6 13
9 15
11 5
4 24
16 6
11 1
14 20
5 13
17 15
19 6
4 9
10 14
1 17
5 12
8 21
16 15
18 4
16 25
15 21
19 18
11 3
2 11
19 12
23 19
5 19
6 17
20 1
18 22
14 25
1 25
9 24
17 14
12 24
10 22
8 22
10 9
25 12
22 13
20 6
23 20
13 8
3 16
22 1
14 5
15 14
2 22
18 2
4 2
13 18
2 16
3 15
11 8
2 10
17 25
8 5
4 22
23 4
20 21
16 8
23 10
22 25
12 14
25 15
22 11
1 19
13 3
11 10
1 6
8 14
5 23
10 12
24 8
6 14
18 21
13 12
22 20
15 22
2 6
3 8
16 18
14 13
2 8
11 16
13 11
3 21
16 10
23 3
7 24
3 24
16 12
23 16
25 19
13 19
1 18
2 23
20 24
7 12
13 15
24 1
25 13
15 24
14 24
14 1
2 14
19 4
4 10
21 7
7 2
21 4
8 18
11 18
25 20
17 20
18 7
4 11
8 19
13 2
16 24

18 55
9 14
17 7
14 6
12 7
3 7
11 3
7 15
4 15
14 2
5 6
13 9
14 4
12 2
16 4
3 6
13 8
5 10
7 5
16 13
4 11
10 17
9 11
9 6
10 11
1 5
11 6
6 18
10 3
6 12
18 15
4 17
9 7
4 3
7 14
16 17
5 3
13 6
1 10
2 3
6 4
12 4
12 9
14 10
13 17
11 14
1 12
16 3
16 6
2 9
18 13
13 2
6 17
16 9
15 12
17 5

27 308
5 22
9 24
16 19
25 24
23 2
10 16
5 15
22 19
27 21
9 19
6 15
16 11
3 15
15 19
27 14
9 23
13 12
19 25
5 23
14 6
2 13
21 20
10 13
1 4
23 27
10 15
15 1
6 25
17 23
25 10
8 18
26 22
20 7
11 19
26 7
25 3
23 13
26 18
27 25
18 10
5 4
19 4
14 19
24 16
25 23
5 21
12 10
15 27
12 5
4 10
4 20
17 16
18 15
15 25
24 3
13 15
26 6
17 12
25 8
4 8
6 8
5 11
23 3
21 4
20 1
16 7
8 3
20 19
8 15
26 14
12 11
13 18
24 11
14 5
17 27
14 3
26 16
8 19
20 3
4 18
7 18
7 4
16 13
21 16
22 16
5 16
4 3
24 5
1 16
24 18
6 1
1 2
15 20
19 7
15 2
5 25
27 8
27 12
9 21
26 10
26 17
16 23
21 7
17 14
26 5
23 10
13 19
10 5
1 18
22 20
2 11
6 17
13 11
4 15
7 17
14 2
1 12
20 24
1 9
23 1
23 19
1 10
23 11
24 22
17 18
18 19
20 18
22 13
25 1
27 18
18 2
4 9
18 21
12 24
17 21
25 9
24 4
14 23
7 8
4 25
19 27
24 6
16 27
11 6
7 22
12 25
21 12
16 14
22 14
22 6
14 21
5 20
20 6
18 5
12 20
2 10
11 8
16 6
26 27
16 25
19 2
22 8
16 18
3 13
2 7
5 1
1 19
11 3
3 10
12 9
24 17
9 11
11 14
26 15
26 13
8 5
17 9
3 21
13 7
26 21
17 1
13 14
1 3
7 9
3 16
14 25
13 4
19 3
9 14
7 23
5 3
27 5
21 10
12 16
20 14
26 23
11 7
4 23
21 8
11 25
13 21
17 2
15 23
2 20
17 20
18 3
15 9
22 25
19 26
19 17
12 18
12 2
3 22
10 19
22 21
21 25
5 7
19 12
19 6
11 21
2 3
25 26
24 14
2 26
10 11
13 20
10 17
13 25
8 17
15 12
7 25
25 18
4 14
14 7
6 9
1 7
6 10
27 11
8 23
6 2
24 2
2 22
27 9
3 26
15 16
3 12
9 5
16 9
24 1
26 12
9 3
1 11
12 22
20 11
10 27
22 18
13 6
15 22
13 17
7 24
27 7
26 24
7 15
24 8
12 6
6 21
19 21
19 5
23 12
25 20
9 13
15 21
6 5
4 26
5 2
10 9
27 6
8 10
25 2
9 2
9 18
7 6
4 6
10 20
24 15
2 8
22 9
19 24
16 8
13 1
11 17
1 21
18 11
17 25
23 6
16 20
11 26
5 13
27 2
11 22
27 20
16 2
22 27
24 23
10 22
26 20
14 10
12 8

4 5
2 4
1 4
3 2
3 1
4 3

23 100
7 12
18 12
1 2
22 3
9 19
21 8
16 6
5 19
10 3
14 4
9 7
11 12
3 21
23 16
8 12
2 6
2 16
6 11
2 22
15 22
3 4
1 16
21 2
14 18
5 9
11 2
19 3
3 23
8 14
23 19
4 17
13 14
23 9
4 9
4 15
12 14
20 10
5 13
22 6
8 17
19 12
4 11
20 9
1 11
15 17
22 7
17 2
23 18
14 5
10 21
4 6
15 21
7 10
11 19
19 7
12 15
2 10
13 23
11 5
17 6
13 3
20 16
17 19
22 17
8 6
5 12
18 5
2 20
19 8
9 8
23 2
14 3
16 5
13 7
5 20
13 18
4 20
22 18
9 1
18 16
8 23
13 19
17 23
7 18
18 17
16 7
19 16
16 9
4 8
18 2
10 8
18 11
14 15
7 1
6 13
14 10
10 19
8 22
17 11
4 22

28 260
18 14
13 11
9 5
5 19
15 6
8 9
14 2
14 13
5 23
28 25
17 14
18 27
11 2
16 20
25 16
23 2
28 22
13 2
27 13
8 27
20 12
18 24
22 5
22 25
3 13
12 26
7 26
7 19
10 26
27 25
22 13
4 3
22 6
17 7
13 23
8 14
12 13
10 15
15 18
26 16
21 16
3 18
15 8
8 11
7 21
21 26
22 3
16 15
18 6
24 20
19 15
26 27
22 4
25 10
12 24
7 2
19 16
3 7
24 7
7 28
6 8
2 24
3 12
16 8
23 10
18 25
3 2
5 25
12 6
6 24
28 10
14 24
24 13
12 10
9 23
17 8
27 7
15 3
13 7
26 18
21 25
22 7
3 14
15 22
12 19
8 18
4 16
7 6
19 4
7 15
25 8
22 26
17 27
22 1
21 28
20 22
12 17
10 17
15 12
4 21
6 5
18 20
19 3
9 2
21 2
6 13
20 11
4 9
20 1
14 27
9 10
18 9
4 23
8 1
22 12
2 27
5 1
13 19
10 27
22 8
25 6
28 27
11 19
8 13
3 27
16 12
9 12
6 14
9 22
5 21
13 4
8 7
27 9
26 4
14 15
25 1
3 8
11 17
7 25
1 2
23 6
14 10
23 14
28 23
24 22
24 26
11 24
5 11
17 15
28 6
28 16
10 2
22 11
20 5
4 8
2 18
1 13
23 12
25 12
17 5
13 21
23 22
3 5
4 27
25 2
27 23
27 12
1 4
17 20
19 23
1 19
14 22
25 23
15 28
4 28
11 21
2 6
5 15
11 26
14 9
16 5
21 17
21 10
13 10
24 5
16 17
16 11
13 15
14 19
10 18
19 8
21 27
7 14
24 21
10 19
20 23
28 20
18 5
22 17
11 23
19 27
16 9
9 25
6 9
24 16
11 6
10 5
22 27
15 9
20 14
2 22
26 8
4 7
23 18
10 24
24 28
10 22
24 25
18 17
4 25
16 14
18 19
2 28
20 21
9 26
24 17
19 26
3 16
10 16
3 6
14 21
11 7
9 21
18 21
4 12
11 12
17 25
14 26
14 28
20 7
25 3
18 13
19 21
8 5
9 7
6 16
26 2
8 12
11 15
26 28
1 6
11 10
2 19
14 1
8 28
27 16
12 28
19 20
18 12
19 24

23 33
23 13
14 13
6 22
21 17
8 18
17 8
13 22
7 2
21 10
9 23
15 8
18 11
3 17
2 6
13 17
15 20
20 18
6 9
16 12
21 15
3 10
6 10
7 19
15 5
7 10
17 9
22 7
20 14
17 16
1 13
6 19
13 11
16 13

14 74
5 3
2 5
9 6
11 10
10 6
13 7
13 5
12 13
8 3
6 7
12 5
10 4
7 2
2 8
4 11
2 10
9 11
3 4
14 1
8 9
2 4
9 13
10 13
3 11
6 3
7 10
6 13
14 10
14 5
5 7
11 13
8 13
2 1
14 7
13 14
2 9
3 12
8 10
10 12
10 3
12 4
6 1
9 14
11 14
12 7
1 5
14 2
1 8
11 8
11 7
2 13
9 3
2 6
4 6
10 5
11 2
8 12
6 5
3 13
10 1
5 4
1 13
5 9
8 14
11 1
4 13
6 11
4 1
7 3
1 9
9 10
11 12
12 2
12 6

23 207
11 10
19 12
13 12
23 15
18 7
7 19
22 23
6 10
17 23
16 10
18 17
15 17
3 9
9 11
20 6
4 17
14 22
18 2
20 18
5 13
5 17
20 15
22 16
5 7
13 22
8 14
4 11
6 12
5 15
4 23
18 6
13 20
15 3
18 21
11 12
22 17
2 4
20 11
12 22
4 6
20 23
21 12
6 5
12 1
11 22
5 11
7 10
20 22
7 13
1 14
12 7
13 3
8 22
3 21
21 16
5 2
4 22
14 19
19 18
3 10
12 10
19 4
7 4
6 19
16 2
9 10
20 17
15 2
5 23
23 10
5 12
17 16
19 13
22 10
15 4
3 11
12 3
7 21
7 8
18 10
2 10
5 8
3 8
12 15
7 15
23 21
11 2
9 19
17 14
4 13
5 16
23 13
17 11
1 3
10 15
20 16
16 7
3 17
16 12
12 23
15 19
3 6
21 20
20 2
23 14
21 8
2 21
11 21
13 6
23 1
7 22
7 14
15 9
21 22
19 11
8 10
7 6
19 22
9 6
10 13
19 10
20 3
20 8
21 19
6 21
2 23
16 13
9 8
13 21
17 13
6 23
1 18
22 2
23 8
8 16
20 10
5 4
5 14
2 17
18 14
15 8
7 3
3 18
13 14
18 8
17 6
4 12
16 23
8 1
2 9
20 14
23 3
15 13
9 22
1 6
2 14
3 19
18 15
14 16
20 9
11 18
7 2
7 9
18 13
15 21
16 3
16 18
11 8
1 11
6 16
17 19
7 20
2 1
10 4
12 14
8 2
20 19
11 7
6 8
4 18
18 12
10 5
18 5
1 16
3 4
8 19
17 7
15 22
19 2
4 8
1 19
9 18
10 21
14 3
1 10
5 21
5 9
8 13
12 8
3 2
2 6
2 12
12 20
9 14
20 4
2 13
17 8

17 33
14 15
4 8
11 6
16 4
6 10
17 13
10 13
15 5
7 6
13 8
1 12
7 17
11 13
16 5
16 11
5 12
12 13
8 5
8 6
13 3
7 14
4 2
14 10
17 14
1 4
11 12
10 17
13 5
17 12
11 8
15 13
4 11
13 16

32 132
18 27
20 25
19 9
1 13
8 30
16 24
22 8
3 27
30 25
17 18
17 20
8 26
9 12
6 31
5 10
6 28
3 22
2 21
2 25
27 10
31 21
29 10
23 30
22 19
29 7
2 30
28 25
15 23
9 4
1 23
7 24
14 28
20 10
20 23
28 21
12 2
4 14
29 3
30 21
12 26
28 7
28 29
15 32
21 17
2 29
16 15
19 15
14 27
29 20
6 26
24 6
1 8
7 15
29 19
18 15
9 24
8 29
12 10
23 4
11 4
11 1
4 2
18 9
5 8
25 29
30 27
10 19
16 19
9 15
16 28
20 31
30 29
30 24
5 13
23 7
19 25
27 31
31 29
27 16
18 21
10 16
7 2
14 30
9 8
18 31
17 22
17 13
30 32
14 22
25 18
7 9
17 10
4 17
31 32
6 1
13 20
27 25
26 10
22 6
11 18
21 13
6 19
12 8
10 18
20 8
2 6
27 6
28 9
17 24
16 25
30 15
22 26
3 31
30 3
21 26
23 3
4 12
22 25
23 22
23 14
17 7
7 11
19 24
20 14
29 4
24 12
28 27
19 18
17 3
2 18
22 28
15 10

27 91
6 25
9 3
9 15
9 5
8 24
27 24
12 20
11 17
15 10
3 22
10 26
11 24
2 10
27 7
5 15
26 19
22 5
2 24
19 4
24 4
6 15
21 13
13 27
5 10
19 20
2 21
9 2
19 3
26 15
18 3
14 3
6 14
18 17
15 13
5 14
14 9
10 27
5 2
25 4
9 1
4 17
20 25
26 3
18 10
19 11
6 13
23 19
26 20
10 11
16 7
18 22
17 13
21 15
26 13
9 21
9 4
22 4
8 13
2 6
4 15
3 10
12 11
13 10
22 20
9 25
4 7
7 26
3 23
27 23
26 5
16 5
26 11
25 27
17 24
6 18
9 19
2 1
13 23
13 22
20 3
27 16
26 27
2 8
11 18
1 22
20 10
17 19
2 16
4 16
27 3
14 17

19 28
10 7
6 11
19 9
12 14
13 2
3 14
7 2
15 4
16 14
7 14
6 15
7 9
3 18
12 19
6 16
10 17
6 13
3 2
8 15
9 14
13 17
11 5
10 3
8 12
7 4
5 14
16 18
19 2

25 35
25 2
16 5
23 13
13 9
3 15
12 24
2 16
8 21
5 22
19 22
18 1
5 8
3 13
15 7
22 11
19 18
4 14
24 5
24 6
17 2
22 12
14 25
13 17
13 6
21 17
19 3
16 21
12 14
19 10
6 17
5 20
9 16
17 8
15 12
8 10

18 32
7 13
4 18
16 9
17 2
6 2
2 13
14 3
9 8
1 17
18 10
6 17
4 7
14 18
15 14
9 5
1 15
15 11
3 9
15 17
4 15
18 3
3 5
16 5
16 4
3 2
5 7
10 14
12 2
12 6
13 4
9 17
5 1

3 2
2 3
1 2

0 0

32 59
6 9
29 25
24 31
32 3
5 22
14 11
30 26
22 31
12 21
30 4
27 14
17 8
8 19
27 11
8 3
30 2
20 17
20 16
16 9
5 4
24 15
31 28
19 30
4 16
10 21
31 6
14 30
20 24
9 24
26 18
25 14
24 28
16 2
27 3
12 5
15 22
32 22
2 17
31 3
23 9
24 23
13 7
27 29
23 19
27 10
5 3
23 1
31 21
9 27
26 14
28 25
30 16
17 28
30 31
5 6
15 21
28 26
18 30
21 30

21 99
19 20
13 17
9 19
17 3
6 9
13 10
12 2
21 20
11 18
18 2
21 10
18 14
4 6
3 6
20 13
13 11
17 21
9 3
20 1
16 14
1 13
7 14
1 2
16 10
2 9
14 11
19 6
6 7
19 15
9 7
9 5
13 7
14 15
4 9
19 3
15 5
12 3
17 5
15 10
9 15
2 15
16 15
8 19
19 12
10 14
12 15
13 18
20 7
13 9
5 14
5 3
20 3
2 7
1 9
13 12
11 5
6 14
17 12
10 9
10 2
16 4
18 6
10 5
19 18
4 3
18 20
14 17
19 10
2 20
18 3
4 12
9 14
11 21
11 15
21 13
8 20
14 20
21 8
15 20
19 14
16 6
12 5
8 11
12 9
17 7
13 6
2 13
18 16
5 6
2 8
8 17
8 1
6 12
17 4
7 12
10 8
2 5
18 15
19 21

0 0

Sample Output

2
2
1
3
1
1
3
2
7
1
1
4
5
5
7
8
5
1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值