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