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