记录编号 |
380810 |
评测结果 |
AAAAAAAAAA |
题目名称 |
P服务点设置 |
最终得分 |
100 |
用户昵称 |
kZime |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.044 s |
提交时间 |
2017-03-10 11:24:08 |
内存使用 |
0.52 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 233
using namespace std;
inline int read(){
int k=0,f=1;
char c=getchar();
for(;!isdigit(c); c = getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())k=k*10+c-'0';
return k*f;
}
int n,m,p,f[MAXN][MAXN],b[MAXN], c[MAXN];
bool bo[MAXN];
int mans=23333333;
void dfs(int a){
if(a>p){
int ma=0;
for(int i = 0; i <= n; i++) {
int mx = 23333333;
for(int k = 1; k <= p; k++) {
if(f[i][b[k]] < 23333333)
mx = min(f[i][b[k]], mx);
}
if(mx < 23333333)
ma = max(mx, ma);
}
if(mans > ma){
mans=ma;
for(int i=1;i<=p;i++){
c[i]=b[i];
}
}
// for(int i=1;i<=p;i++){
// printf("%d ",b[i]);
// }
// printf("\n%d",ma);
// printf("\n");
return;
}
for(int i=b[a-1];i<n;i++){
if(!bo[i]){
bo[i]=1;
b[a]=i;
dfs(a+1);
bo[i]=0;
}
}
}
int main(){
#ifndef LOCAL
freopen("djsc.in", "r", stdin);
freopen("djsc.out", "w", stdout);
#endif
// freopen("in.txt", "r", stdin);
memset(f,127/2,sizeof(f));
n=read();
m=read();
p=read();
for(int i=1;i<=m;i++){
int x=read();
int y=read();
f[y][x]=f[x][y]=read();
}
for(int i = 0; i < n; i++)f[i][i] = 0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
}
}
}
// for(int i=0;i<n;i++){
// for(int j=0;j<n;j++){
// printf("%d ",f[i][j]);
// }
// printf("\n");
// }
// for(int i=0;i<n;i++){
// printf("%d ",find_max(i));
// }
dfs(1);
// printf("\n%d\n",mans);
for(int i=1;i<=p;i++){
printf("%d ",c[i]);
}
//
}