http://codeforces.com/contest/987/problem/D

题目大概:

给出一个n个城镇m条边的图,给出每个城镇拥有的特产(可能多个城镇有相同特产)。有k种不同特产。

要求每个城镇需要其他城镇运输特产到自己的城镇,每个城镇必须拥有s种特产,那么在城镇满足s种特产后,需要的最短路径是多长,最短路指的是特产运输过来走过的边的数量。

分析:

一开始以为是道水题,因为我只要对每个点都进行一次DFS,那问题就很简单了,但是。。。细想下,这其实是不行的,因为会TLE. 那现在我们来转化下思维,城市太多了,可是特产的种类很少,所以!!!!我们算出每种特产到每个城市的最短距离,然后把所有到i城镇的特产的最短路 排序,取前s个就是i点的最短路径了。

#include <bits/stdc++.h>

using namespace std;
const int maxn=1e5+;
const int INF=0x3f3f3f3f;
int e[maxn];
int vis[maxn];///标记
int lis[maxn][];///记录
vector<int>F[];///每种特产到每个城市
vector<int>G[maxn];///建图
struct poin
{
int x,d;
};
int ans=;
int s;
void bfs(int x)
{
queue<poin>Q;
///x种特产的开始城市
for(int i=;i<F[x].size();i++)
{
int v=F[x][i];
poin q;
q.x=v;q.d=;
Q.push(q);
}
///x种特产去到的城市
while(!Q.empty())
{
poin u=Q.front();Q.pop();
///u.x城市到x特产的最短距离
lis[u.x][x]=min(u.d,lis[u.x][x]);
for(int i=;i<G[u.x].size();i++)
{
int v=G[u.x][i];
if(vis[v])continue;
vis[v]=;
poin q;
q.x=v;
q.d=u.d+;
Q.push(q);
}
}
}
int main()
{
int n,m,k;
scanf("%d%d%d%d",&n,&m,&k,&s);
for(int i=;i<=n;i++)
{
scanf("%d",&e[i]);
F[e[i]].push_back(i);///e[i]产品在多少城市
}
int u,v;
for(int i=;i<=m;i++)
{
scanf("%d%d",&u,&v);
G[u].push_back(v);///无向图
G[v].push_back(u);
}
memset(lis,0x3f3f3f3f,sizeof(lis));
for(int i=;i<=k;i++)
{
memset(vis,,sizeof(vis));
bfs(i);///对每种特产DFS
} for(int i=;i<=n;i++)
{
sort(lis[i]+,lis[i]+k+);///排序
long long sum=;
///i城市拥有的s种特产的最短距离
for(int j=;j<=s;j++)
{
sum+=lis[i][j];
}
printf("%I64d ",sum);
} return ;
}

CF D. Fair(思维+DFS)的更多相关文章

  1. ZOJ 4124 拓扑排序+思维dfs

    ZOJ - 4124Median 题目大意:有n个元素,给出m对a>b的关系,问哪个元素可能是第(n+1)/2个元素,可能的元素位置相应输出1,反之输出0 省赛都过去两周了,现在才补这题,这题感 ...

  2. Codeforces542E Playing on Graph 思维+DFS+BFS

    解法参考https://www.cnblogs.com/BearChild/p/7683114.html这位大佬的,这位大佬讲得很好了. 这道题还是有一定的思维的. 直接贴代码: #include&l ...

  3. CF 208E - Blood Cousins dfs序+倍增

    208E - Blood Cousins 题目:给出一棵树,问与节点v的第k个祖先相同的节点数有多少个. 分析: 寻找节点v的第k个祖先,这不就是qtree2简化版吗,但是怎么统计该祖先拥有多少个深度 ...

  4. CF 291E. Tree-String Problem [dfs kmp trie图优化]

    CF291E 题意:一棵树,每条边上有一些字符,求目标串出现了多少次 直接求目标串的fail然后一边dfs一边跑kmp 然后就被特殊数据卡到\(O(n^2)\)了... 因为这样kmp复杂度分析的基础 ...

  5. Trips CodeForces - 1037E(思维dfs)

    题意: 就是几个人去旅游,组队的条件是对于某个队员 队里至少有两个是他的朋友,每天早晨都会有一对新人成为朋友 解析: 用set标记互为朋友 a[i] b[i] 表示在第i天早晨 u和v成为朋友 先求最 ...

  6. codeforces1073d Berland Fair 思维(暴力删除)

    题目传送门 题目大意:一圈人围起来卖糖果,标号从1-n,每个位置的糖果都有自己的价格,一个人拿着钱从q开始走,能买则买,不能买则走到下一家,问最多能买多少件物品. 思路:此题的关键是不能买则走到下一家 ...

  7. #537 (Div. 2) Creative Snap (思维+dfs)

    https://codeforces.com/contest/1111/problem/C 横坐标1..2^n对应着2^n个复仇者的基地,上面有k个复仇者(位置依次给出).你是灭霸你要用以下方法消灭这 ...

  8. 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)

    Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...

  9. hdu6446 Tree and Permutation 2018ccpc网络赛 思维+dfs

    题目传送门 题目描述:给出一颗树,每条边都有权值,然后列出一个n的全排列,对于所有的全排列,比如1 2 3 4这样一个排列,要算出1到2的树上距离加2到3的树上距离加3到4的树上距离,这个和就是一个排 ...

随机推荐

  1. js兼容事件

    //浏览器检测(function () { window.sys = {}; var ua = navigator.userAgent.toLowerCase(); var s; (s = ua.ma ...

  2. ubuntu16部署gitlab

    一.gitlab的安装 1. 安装依赖包 $ sudo apt-get update #如无ssh还需安装openssh-server $ sudo apt-get install postfix c ...

  3. FileZilla Server下通过别名设置虚拟目录

    说明:FileZilla Server 的虚拟目录设置与其它 FTP 服务器软件有所不同.在 FileZilla Server 中设置虚拟目录,必须采用 FTP 根目录 + 虚拟目录名的形式来进行.比 ...

  4. JavaScript的作用域与闭包

    JavaScript的作用域以函数为界,不同的函数拥有相对独立的作用域.函数内部可以声明和访问全局变量,也可以声明局部变量(使用var关键字,函数的参数也是局部变量),但函数外部无法访问内部的局部变量 ...

  5. echarts柱状图每个柱子显示不同颜色,并且能够实现点击每种颜色影藏对应柱子的功能

    ---------------------------------------------------------代码区---------------------------------------- ...

  6. STM32数据类型定义

    #ifndef __STM32F10x_TYPE_H #define __STM32F10x_TYPE_H typedef signed long s32; typedef signed short ...

  7. Luogu 1314 [NOIP2011] 聪明的质监员

    二分答案 + 前缀和. 题面中式子的意思是每一个区间$[l, r]$的贡献是这个区间内$w_i \geq W$的个数乘以这些$i$的$v_i$和. 很快发现了答案具有单调性,可以做两遍二分,分别看看小 ...

  8. Luogu 3233 [HNOI2014]世界树

    BZOJ 3572 首先看出虚树,然后考虑如何$dp$. 我们先在处理出的虚树上$dp$一遍,处理出虚树上所有点距离最近的关键点(关键点一定在虚树上嘛). 具体来说,先搜一遍处理出每一个点的父亲到它的 ...

  9. 8.View类

    Basic Concepts      在Modle/View 结构中,View从Model中提取数据,并显示给用户.View显示数据的方式不一定与Model中数据排列方式相同,也可能与底层数据结构完 ...

  10. Entity Framework Tutorial Basics(17):DBSet Class

    DBSet Class DBSet class represents an entity set that is used for create, read, update, and delete o ...