比赛 防止浮躁的小练习v0.6 评测结果 AAAAAAAAAA
题目名称 P服务点设置 最终得分 100
用户昵称 cdcq 运行时间 0.055 s
代码语言 C++ 内存使用 0.25 MiB
提交时间 2016-10-20 17:33:01
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int oo=168430090;
int n,m,p;
int e[110][110];
int ans=oo;
int use[110],utou=0;
int ans_dui[110],atou=0;
void floyd(){
	for(int i=0;i<n;i++)  e[i][i]=0;
	for(int k=0;k<n;k++)
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
}
void dfs(int x,int y,int z){
	if(x==p+1){
		if(z<ans){
			atou=utou;
			for(int i=1;i<=atou;i++)  ans_dui[i]=use[i];
			ans=z;
		}
		return;
	}
	for(int i=y+1;i<n;i++){
		use[++utou]=i;
		int maxx=0,minn;
		for(int j=0;j<n;j++){
			minn=oo;
			for(int k=1;k<=utou;k++)
				minn=min(minn,e[use[k]][j]);
			maxx=max(maxx,minn);
		}
		dfs(x+1,i,maxx);
		utou--;
	}
}
void out_e(){
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++)
			cout<<e[i][j]<<" ";
		cout<<endl;
	}
}
int main(){
	//freopen("ddd.in","r",stdin);
	freopen("djsc.in","r",stdin);
	freopen("djsc.out","w",stdout);
	memset(e,10,sizeof(e));
	cin>>n>>m>>p;
	int _left,_right,_value;
	while(m --> 0){//趋向于
		scanf("%d%d%d",&_left,&_right,&_value);
		e[_left][_right]=e[_right][_left]=min(e[_left][_right],_value);
	}
	floyd();
	//out_e();
	dfs(1,-1,oo);
	//cout<<ans<<endl;
	for(int i=1;i<=atou;i++)  printf("%d ",ans_dui[i]);
	cout<<endl;
	return 0;
}