比赛 |
防止浮躁的小练习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;
}