题目:http://codeforces.com/contest/986/problem/A

如果从每个村庄开始bfs找货物,会超时。

发现k较小。那就从货物开始bfs,给村庄赋上dis[ 该货物 ]。

但这样还是n^2。考虑有相同货物的村庄,其实可以一起bfs。就是多源bfs。这样就是n*k的了。

多源bfs就是把一些起始点的dis全赋了初值0,然后都放进队列里,之后正常bfs。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=1e5+,K=;
  7. int n,m,k,s,head[N],xnt,dis[N][K],a[N],q[K][N],h,t[K];
  8. struct Ed{
  9. int next,to;
  10. Ed(int n=,int t=):next(n),to(t) {}
  11. }ed[N<<];
  12. void add(int x,int y)
  13. {
  14. ed[++xnt]=Ed(head[x],y);head[x]=xnt;
  15. ed[++xnt]=Ed(head[y],x);head[y]=xnt;
  16. }
  17. int main()
  18. {
  19. scanf("%d%d%d%d",&n,&m,&k,&s);
  20. memset(dis,0x3f,sizeof dis);
  21. for(int i=;i<=n;i++)
  22. {
  23. scanf("%d",&a[i]);dis[i][a[i]]=;
  24. q[a[i]][++t[a[i]]]=i;
  25. }
  26. int x,y;
  27. for(int i=;i<=m;i++)
  28. {
  29. scanf("%d%d",&x,&y);add(x,y);
  30. }
  31. for(int i=;i<=k;i++)
  32. {
  33. h=;
  34. while(h<=t[i])
  35. {
  36. int k=q[i][h++];
  37. for(int j=head[k],v;j;j=ed[j].next)
  38. if(dis[v=ed[j].to][i]>dis[k][i]+)
  39. {
  40. dis[v][i]=dis[k][i]+;q[i][++t[i]]=v;
  41. }
  42. }
  43. }
  44. for(int i=;i<=n;i++)
  45. {
  46. int ans=;sort(dis[i]+,dis[i]+k+);
  47. for(int j=;j<=s;j++)ans+=dis[i][j];
  48. printf("%d ",ans);
  49. }
  50. return ;
  51. }

CF 986A Fair——多源bfs的更多相关文章

  1. CF 986A Fair(多源BFS)

    题目描述 一些公司将在Byteland举办商品交易会(or博览会?).在Byteland有 nnn 个城市,城市间有 mmm 条双向道路.当然,城镇之间两两连通. Byteland生产的货物有 kkk ...

  2. 牛客网 牛客练习赛7 D. 珂朵莉的无向图(多源BFS)

    题目链接  Problem D 比赛的时候完全想不到 直接对给定的这些点做多源$BFS$,把给定的这些点全都压到队列里,然后一个个做. 最后统计被访问的点的个数即可. #include <bit ...

  3. bzoj 2252 [ 2010 Beijing wc ] 矩阵距离 —— 多源bfs

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2252 又没能自己想出来... 一直在想如何从每个1开始广搜更新答案,再剪剪枝,什么遇到1就不 ...

  4. CodeForces - 986A Fair (BFS+贪心)

    题意:有N个点M条边的无向图,每个点有给定的ai(1<=ai<=K,K<=200)表示该点拥有的物品编号,保证1-K在N个点全部出现.求每个点收集S个不同的物品所要走过的最短路程(边 ...

  5. Codeforces 986A. Fair(对物品bfs暴力求解)

    解题思路: 1.对物品i bfs,更新每个小镇j获得每个物品i的最短距离. 2.时间复杂度o(n*k),满足2s的要求. 代码: #include <iostream> #include ...

  6. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

  7. CF 520 B. Two Buttons(bfs)

    /*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*2,蓝色:-1,如果变成负数,就变成原来的数.CF 520 B. Two Buttons思 ...

  8. CF986A Fair【图论/BFS】

    [题意]: 有些公司将在Byteland举办公平的会议.Byteland的n个城镇,m条两镇之间的双向道路.当然,你可以使用道路从任一个城镇到达任何城镇. 有k种商品产自Byteland,并且每个城镇 ...

  9. cf.295.B Two Buttons (bfs)

     Two Buttons time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

随机推荐

  1. Qt事件机制---信号通过事件实现,事件可以过滤,事件更底层,事件是基础,信号是扩展。

    转:http://www.cnblogs.com/findumars/p/8001484.html Qt事件机制(是动作发生后,一种通知对象的消息,是被动与主动的总和.先处理自己队列中的消息,然后再处 ...

  2. Shell编程之case条件

    一.case条件语句 1.语法 case "变量" in 值 1) 指令 1... ;; 值 2) 指令 2... ;; *) 指令 3... esac case条件语句的执行流程 ...

  3. 跨平台移动开发_Windows Phone 8 使用 PhoneGap 方法

    第一步,下载Windows Phone SDK 8.0 http://www.microsoft.com/zh-cn/download/details.aspx?id=35471 离线下载地址(推荐使 ...

  4. VMware Big Data Extensions 安装步骤

    文档地址:https://pubs.vmware.com/bde-2/index.jsp 第一步,部署BigDataExtensions OVF模板,并登陆Console修改默认密码 第二步,在 Se ...

  5. 【转载】poj 1276 Cash Machine 【凑钱数的问题】【枚举思路 或者 多重背包解决】

    转载地址:http://m.blog.csdn.net/blog/u010489766/9229011 题目链接:http://poj.org/problem?id=1276 题意:机器里面共有n种面 ...

  6. FreeMarker 使用实例

    以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... - ...

  7. mysql服务器3306端口不能远程连接的解决

    1.网络检测   1)ping主机可以:   2)telnet 主机3306端口不可以:     telnet 主机22端口可以:   说明与本机网络没有关系: 2.端口检测   1)netstat ...

  8. Owin and Startup class

    https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-startup-class-detection ...

  9. 将本地jar包制作成maven依赖

    首先,需要配置maven环境,如果没配置,传送门:http://www.cnblogs.com/hyyq/p/6557683.html 然后,需要一个ben地的jar包,这里以阿里云支付宝sdk为例, ...

  10. nova Rescue 和 Unrescue

    usage: nova rescue [--password <password>] [--image <image>] <server> Reboots a se ...