记录编号 45878 评测结果 AAAAAAAAAA
题目名称 P服务点设置 最终得分 100
用户昵称 Gravatar青阳 是否通过 通过
代码语言 C 运行时间 0.037 s
提交时间 2012-10-25 19:50:41 内存使用 0.30 MiB
显示代码纯文本
#include <stdio.h>
#define min(a, b) ((a)<(b)?(a):(b))
#define INF 0x7FFFFF
int map[100][100];
int tmp[100], ans[101];
int m, n, p;

void srch(int start, int now)
{
	int i, j;
	if(now >= p){
		int t, s;
		t = 0;
		for(i = 0; i < n; i++){
		      	s = INF;
			for(j = 0; j < now; j++){
				s = min(map[tmp[j]][i], s);
			}
			if(t < s){
				t = s;
			}
		}
		if(ans[n] > t){
			ans[n] = t;
			for(i = 0; i < now; i++){
				ans[i] = tmp[i];
			}
		}
		return ;
	}
	for(i = start; i < n; i++){
		tmp[now] = i;
		srch(i + 1, now + 1);
	}
	tmp[now] = 0;
}

int main(void)
{
	int i, j, k;
	int a, b, c;
	freopen("djsc.in", "r", stdin);
	freopen("djsc.out", "w", stdout);
	scanf("%d%d%d", &n, &m, &p);
	for(i = 0; i < n; i++){
		for(j = 0; j < n; j++){
			map[i][j] = INF;
		}
		map[i][i] = 0;
	}
	for(i = 0; i < m; i++){
		scanf("%d%d%d", &a, &b, &c);
		map[a][b] = map[b][a] = c;
	}
	for(k = 0; k < n; k++){
		for(i = 0; i < n; i++){
			for(j = i + 1; j < n; j++){
				if(map[i][j] > map[i][k] + map[k][j]){
					map[i][j] = map[i][k] + map[k][j];
				}
			}
		}
	}
	ans[n] = INF;
	srch(0, 0);
	for(i = 0; i < p; i++){
		if(i != 0){
			printf(" ");
		}
		printf("%d", ans[i]);
	}
	printf("\n");
	return 0;
}