比赛 防止浮躁的小练习v0.6 评测结果 AAAAAAAAAA
题目名称 P服务点设置 最终得分 100
用户昵称 cdcq 运行时间 0.055 s
代码语言 C++ 内存使用 0.25 MiB
提交时间 2016-10-20 17:33:01
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. const int oo=168430090;
  8. int n,m,p;
  9. int e[110][110];
  10. int ans=oo;
  11. int use[110],utou=0;
  12. int ans_dui[110],atou=0;
  13. void floyd(){
  14. for(int i=0;i<n;i++) e[i][i]=0;
  15. for(int k=0;k<n;k++)
  16. for(int i=0;i<n;i++)
  17. for(int j=0;j<n;j++)
  18. e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
  19. }
  20. void dfs(int x,int y,int z){
  21. if(x==p+1){
  22. if(z<ans){
  23. atou=utou;
  24. for(int i=1;i<=atou;i++) ans_dui[i]=use[i];
  25. ans=z;
  26. }
  27. return;
  28. }
  29. for(int i=y+1;i<n;i++){
  30. use[++utou]=i;
  31. int maxx=0,minn;
  32. for(int j=0;j<n;j++){
  33. minn=oo;
  34. for(int k=1;k<=utou;k++)
  35. minn=min(minn,e[use[k]][j]);
  36. maxx=max(maxx,minn);
  37. }
  38. dfs(x+1,i,maxx);
  39. utou--;
  40. }
  41. }
  42. void out_e(){
  43. for(int i=0;i<n;i++){
  44. for(int j=0;j<n;j++)
  45. cout<<e[i][j]<<" ";
  46. cout<<endl;
  47. }
  48. }
  49. int main(){
  50. //freopen("ddd.in","r",stdin);
  51. freopen("djsc.in","r",stdin);
  52. freopen("djsc.out","w",stdout);
  53. memset(e,10,sizeof(e));
  54. cin>>n>>m>>p;
  55. int _left,_right,_value;
  56. while(m --> 0){//趋向于
  57. scanf("%d%d%d",&_left,&_right,&_value);
  58. e[_left][_right]=e[_right][_left]=min(e[_left][_right],_value);
  59. }
  60. floyd();
  61. //out_e();
  62. dfs(1,-1,oo);
  63. //cout<<ans<<endl;
  64. for(int i=1;i<=atou;i++) printf("%d ",ans_dui[i]);
  65. cout<<endl;
  66. return 0;
  67. }
  68.  
  69.