比赛 |
防止浮躁的小练习v0.6 |
评测结果 |
AAAAAAAAAA |
题目名称 |
P服务点设置 |
最终得分 |
100 |
用户昵称 |
Lethur |
运行时间 |
0.038 s |
代码语言 |
C++ |
内存使用 |
0.35 MiB |
提交时间 |
2016-10-20 16:01:02 |
显示代码纯文本
//Floyed+迭代加深搜索
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<cmath>
#define MAXN 101
#define INF 0x3f3f3f3f
#define COGS
using namespace std;
typedef long long ll;
typedef long double ld;
int map[MAXN][MAXN]={0};
int n,m,p;
int max_num;
int min_num;
int ans_num=INF;
int ans[MAXN]={0};
template<typename T>inline T read(T &x)
{
int f=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-1;
for(x=0;isdigit(ch);ch=getchar())
x=10*x+ch-'0';
return x*=f;
}
template<typename T>inline void write(T x)
{
if(x==0)
{
putchar('0');
return ;
}
if(x<0)
{
putchar('-');
x=-x;
}
int top=0;
static char s[20];
for(;x;x/=10)
{
s[++top]=x%10+'0';
}
while(top)
{
putchar(s[top--]);
}
return ;
}
inline void dfs(int deep,int now)
{
static int v[MAXN]={0};
max_num=-1;
if(now>n)
return ;
if(deep==p)
{
for(int i=0;i<n;i++)
{
min_num=INF;
for(int j=0;j<p;j++)
{
min_num=min(min_num,map[i][v[j]]);
}
max_num=max(min_num,max_num);
}
if(max_num<ans_num)
{
ans_num=max_num;
for(int i=0;i<p;i++)
{
ans[i]=v[i];
}
}
return ;
}
for(int i=now+1;i<n&&n-i+1>=p-deep;i++)
{
v[deep]=i;
dfs(deep+1,i);
}
return ;
}
inline void work()
{
int i,j,k;
read(n);
read(m);
read(p);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
{
map[i][j]=map[j][i]=0;
}
else
{
map[i][j]=INF;
}
}
}
for(int i=0;i<m;i++)
{
int x,y,z;
read(x);
read(y);
read(z);
map[x][y]=map[y][x]=z;
}
for(int k=0;k<n;k++)
{
if(i!=k)
{
for(int i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i!=j&&j!=k&&map[i][j]>map[i][k]+map[k][j])
{
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
}
dfs(0,-1);
for(int i=0;i<p;i++)
{
write(ans[i]);
putchar(' ');
}
putchar('\n');
return ;
}
int main()
{
ios::sync_with_stdio(false);
#ifdef COGS
freopen("djsc.in","r",stdin);
freopen("djsc.out","w",stdout);
#endif
work();
return 0;
}