http://codeforces.com/problemset/problem/986/A

n个点的无向连通图,每个点有一个属性,求每个点到s个不同属性点的最短距离

依稀记得那天晚上我和Menteur-Hxy探讨这道题如何不可做的样子

直观想法当然是每个点出发bfs,找到s个就停止,但这最差是n^2的,不能接受!

解法是多源广搜,注意到货物种类非常小(<=100),所以可以求出每个点获得每种货物的最短距离。

做法是进行k次bfs,对于第i次,起点st是每个种类为i的点,广搜的性质决定了她们的平行关系。

这样就可以求出每种货物到每个点的距离,换言之,就是每个点获得每种货物的代价(最小)

然后对于每个点,答案就是最小的s个啦

无向图注意开两倍边

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue> using namespace std; const int MAXN=; inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} struct Edge{
int next,to;
}e[MAXN<<];
int ecnt,head[MAXN];
inline void add(int x,int y){
e[++ecnt].to = y;
e[ecnt].next = head[x];
head[x] = ecnt;
} int dis[MAXN][],typ[MAXN];
//dis[i][j] - the minimum cost for town i to get the j-th goods int n,m,k,s; queue<int> Q;
void bfs(int x){
for(int i=;i<=n;i++) if(typ[i]==x) Q.push(i),dis[i][x]=;
while(!Q.empty()){
int top=Q.front();Q.pop();
for(int i=head[top];i;i=e[i].next){
int v=e[i].to;
if(dis[v][x]>dis[top][x]+){
dis[v][x]=dis[top][x]+;
Q.push(v);
}
}
}
} void init(){
memset(dis,0x3f,sizeof(dis));
} vector<int> V; int main(){
n=rd();m=rd();k=rd();s=rd();
init();
for(int i=;i<=n;i++) typ[i]=rd();
int x,y,w;
for(int i=;i<=m;i++){
x=rd();y=rd();
add(x,y);add(y,x);
}
for(int i=;i<=k;i++) bfs(i);
int ret=;
for(int i=;i<=n;i++){
V.clear();
for(int j=;j<=k;j++) V.push_back(dis[i][j]);
sort(V.begin(),V.end());
ret=;
for(int j=;j<s;j++) ret+=V[j];
printf("%d ",ret);
}
return ;
}

最新文章

  1. 微信应用号(小程序)开发IDE配置(第一篇)
  2. UOJ#213——【UNR #1】争夺圣杯
  3. python的一道面试题 __call__ 的使用.
  4. webkit浏览器常见开发问题
  5. Xcode pch文件问题
  6. POJ-2726-Holiday Hotel
  7. HDU 5821 Ball (排序)
  8. Maven配置文件说明
  9. CSS3 垂直树状图——运用 :before 和 :after
  10. Jquery 简单的Tab选项卡特效
  11. [小技巧] 打造属于 Dell XPS 13 (9350) 的专属 Windows 7 iso 镜像
  12. (转) Name visibility
  13. Java初认识--Java语言的书写规范及基本的运算符
  14. 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误
  15. 【NOIP2006】能量项链
  16. node.js学习三--------------------- http服务器模块的搭建
  17. GANs用于文本生成
  18. tcpdump抓包具体分析
  19. session_start 统计实时访客人数
  20. Yii框架的原代码

热门文章

  1. hdoj1001【智障了。。。】
  2. bzoj 4240: 有趣的家庭菜园【树状数组+贪心】
  3. [Swift]有用的Binary Heap Type类
  4. TensorFlow多线程输入数据处理框架(二)——输入文件队列
  5. Oracle数据库创建表空间及用户授权
  6. SpringAOP和Spring事物管理
  7. Mac上搭建直播服务器Nginx+rtmp,实现手机推流、拉流
  8. iOS 将navigationItem.titleView设置为自定义UISearchBar (Ficow实例讲解)
  9. C++ typedef typename 作用
  10. selenium自动化测试实例