比赛 |
防止浮躁的小练习V0.1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
P服务点设置 |
最终得分 |
100 |
用户昵称 |
AntiLeaf |
运行时间 |
0.260 s |
代码语言 |
C++ |
内存使用 |
0.34 MiB |
提交时间 |
2016-10-07 16:32:29 |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=110;
int n,m,p,x,y,dis[maxn][maxn],tmp,ds,ans=0x7ffffff;
bool used[maxn],b[maxn];
int main(){
freopen("djsc.in","r",stdin);
freopen("djsc.out","w",stdout);
scanf("%d%d%d",&n,&m,&p);
memset(dis,63,sizeof(dis));
for(int i=1;i<=n;i++)dis[i][i]=0;
while(m--){
scanf("%d%d",&x,&y);
x++;
y++;
scanf("%d",&dis[x][y]);
dis[y][x]=dis[x][y];
}
for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
for(int i=1;i<=p;i++)used[i]=true;
for(int i=p+1;i<=n;i++)used[i]=false;
do{
tmp=0;
for(int i=1;i<=n;i++){
ds=0x7ffffff;
for(int j=1;j<=n;j++)if(used[j])ds=min(ds,dis[i][j]);
tmp=max(tmp,ds);
}
if(tmp<ans){
ans=tmp;
memcpy(b,used,sizeof(b));
}
}while(prev_permutation(used+1,used+n+1));
for(int i=1;i<=n;i++)if(b[i])printf("%d ",i-1);
fclose(stdin);
fclose(stdout);
return 0;
}
/*
6 8 2
0 2 10
0 4 30
0 5 100
1 2 5
2 3 50
3 5 10
4 3 20
4 5 60
Answer:
0 3
*/