比赛 防止浮躁的小练习v0.6 评测结果 AAAAAAAAAA
题目名称 P服务点设置 最终得分 100
用户昵称 kito 运行时间 0.492 s
代码语言 C++ 内存使用 0.34 MiB
提交时间 2016-10-20 17:24:56
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define	fcl	fclose(stdin);	fclose(stdout);	return 0
	#define	SUBMIT 2333
int n,m,q;
int F[110][110];
inline int GetMin(const int& a,const int& b){
	if(a<b)	return a;
	return b;
}
inline int GetMax(const int& a,const int& b){
	if(a>b)	return a;
	return b;
}
int vit[110];
int Ans[110],ANS=0x7f7f7f7f;
void Judge(){
	int A=0x7f7f7f7f,B=0;
	for(int i=0;i<n;++i){
		A=0x7f7f7f7f;
		for(int j=0;j<n;++j){
			if(vit[j]){
				A=GetMin(A,F[i][j]);
			}
		}
		B=GetMax(A,B);
	}
	if(B<ANS){
		ANS=B;
		A=0;
		for(int i=0;i<n;++i){
			if(vit[i]){
				Ans[++A]=i;
			}
		}
	}
}

int main(){
	#ifdef SUBMIT
	freopen("djsc.in","r",stdin);
	freopen("djsc.out","w",stdout);
	#endif
	scanf("%d%d%d",&n,&m,&q);
	int a,b,c;
	memset(F,0x3f,sizeof(F));
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&a,&b,&c);
		F[a][b]=c;
		F[b][a]=c;
	}
	for(int i=0;i<n;++i){
		F[i][i]=0;
	}
	for(int k=0;k<n;++k){
		for(int i=0;i<n;++i){
			for(int j=0;j<n;++j){
				if(i!=j&&i!=k&&j!=k){
					F[i][j]=GetMin(F[i][j],F[i][k]+F[k][j]);
				}
			}
		}
	}
	for(int i=0;i<q;++i){
		vit[i]=1;
	}
	Judge();
	while(prev_permutation(vit,vit+n)){
		Judge();
	}
	for(int i=1;i<=q;++i){
		printf("%d ",Ans[i]);
	}
	#ifndef SUBMIT
	getchar();	getchar();
	#endif
	fcl;
}