CF986A Fair
题目描述
Some company is going to hold a fair in Byteland. There are n n n towns in Byteland and m m m two-way roads between towns. Of course, you can reach any town from any other town using roads.
There are k k k types of goods produced in Byteland and every town produces only one type. To hold a fair you have to bring at least s s s different types of goods. It costs d(u,v) d(u,v) d(u,v) coins to bring goods from town u u u to town v v v where d(u,v) d(u,v) d(u,v) is the length of the shortest path from u u u to v v v . Length of a path is the number of roads in this path.
The organizers will cover all travel expenses but they can choose the towns to bring goods from. Now they want to calculate minimum expenses to hold a fair in each of n n n towns.
输入输出格式
输入格式:
There are 4 4 4 integers n n n , m m m , k k k , s s s in the first line of input ( 1≤n≤105 1 \le n \le 10^{5} 1≤n≤105 , 0≤m≤105 0 \le m \le 10^{5} 0≤m≤105 , 1≤s≤k≤min(n,100) 1 \le s \le k \le min(n, 100) 1≤s≤k≤min(n,100)
) — the number of towns, the number of roads, the number of different
types of goods, the number of different types of goods necessary to hold
a fair.
In the next line there are n n n integers a1,a2,…,an a_1, a_2, \ldots, a_n a1,a2,…,an ( 1≤ai≤k 1 \le a_{i} \le k 1≤ai≤k ), where ai a_i ai is the type of goods produced in the i i i -th town. It is guaranteed that all integers between 1 1 1 and k k k occur at least once among integers ai a_{i} ai .
In the next m m m lines roads are described. Each road is described by two integers u u u v v v ( 1≤u,v≤n 1 \le u, v \le n 1≤u,v≤n , u≠v u \ne v u≠v
) — the towns connected by this road. It is guaranteed that there is no
more than one road between every two towns. It is guaranteed that you
can go from any town to any other town via roads.
输出格式:
Print n n n numbers, the i i i -th of them is the minimum number of coins you need to spend on travel expenses to hold a fair in town i i i . Separate numbers with spaces.
输入输出样例
7 6 3 2
1 2 3 3 2 2 1
1 2
2 3
3 4
2 5
5 6
6 7
1 1 1 2 2 1 1
题意:
n 个点,m 条边,有k种不同的物品,求从每个点出发收集s个不同物品的最短距离;
我们从每种物品 bfs;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<bitset>
#include<ctime>
#include<deque>
#include<stack>
#include<functional>
#include<sstream>
//#include<cctype>
//#pragma GCC optimize(2)
using namespace std;
#define maxn 200005
#define inf 0x7fffffff
//#define INF 1e18
#define rdint(x) scanf("%d",&x)
#define rdllt(x) scanf("%lld",&x)
#define rdult(x) scanf("%lu",&x)
#define rdlf(x) scanf("%lf",&x)
#define rdstr(x) scanf("%s",x)
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int U;
#define ms(x) memset((x),0,sizeof(x))
const long long int mod = 1e9 + 7;
#define Mod 1000000000
#define sq(x) (x)*(x)
#define eps 1e-4
typedef pair<int, int> pii;
#define pi acos(-1.0)
//const int N = 1005;
#define REP(i,n) for(int i=0;i<(n);i++)
typedef pair<int, int> pii;
inline ll rd() {
ll x = 0;
char c = getchar();
bool f = false;
while (!isdigit(c)) {
if (c == '-') f = true;
c = getchar();
}
while (isdigit(c)) {
x = (x << 1) + (x << 3) + (c ^ 48);
c = getchar();
}
return f ? -x : x;
} ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a%b);
}
int sqr(int x) { return x * x; } /*ll ans;
ll exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) {
x = 1; y = 0; return a;
}
ans = exgcd(b, a%b, x, y);
ll t = x; x = y; y = t - a / b * y;
return ans;
}
*/ int n, m, k, s;
vector<int>v[maxn];
vector<int>c[maxn];
int dis[100004][200];
bool vis[100004][200];
void bfs(int x) {
queue<int>q; ms(vis);
for (int i = 0; i < v[x].size(); i++) {
q.push(v[x][i]); dis[v[x][i]][x] = 0;
}
while (!q.empty()) {
int u = q.front(); q.pop(); vis[u][x] = 0;
for (int i = 0; i < c[u].size(); i++) {
int to = c[u][i];
if (dis[to][x] > dis[u][x] + 1) {
dis[to][x] = dis[u][x] + 1;
if (!vis[to][x]) {
q.push(to); vis[to][x] = 1;
}
}
}
}
} int main() {
//ios::sync_with_stdio(0);
cin >> n >> m >> k >> s;
memset(dis, 0x3f, sizeof(dis));
for (int i = 1; i <= n; i++) {
int x; rdint(x);
v[x].push_back(i);
}
for (int i = 1; i <= m; i++) {
int u, V; rdint(u); rdint(V);
c[V].push_back(u); c[u].push_back(V);
}
for (int i = 1; i <= k; i++)bfs(i);
for (int i = 1; i <= n; i++) {
sort(dis[i] + 1, dis[i] + 1 + k);
int ans = 0;
for (int j = 1; j <= s; j++)ans += dis[i][j];
cout << ans << " ";
}
return 0;
}
CF986A Fair的更多相关文章
- CF986A Fair【图论/BFS】
[题意]: 有些公司将在Byteland举办公平的会议.Byteland的n个城镇,m条两镇之间的双向道路.当然,你可以使用道路从任一个城镇到达任何城镇. 有k种商品产自Byteland,并且每个城镇 ...
- NOIP前刷题记录
因为本蒻实在太蒻了...对于即将到来的NOIP2018ssfd,所以下决心要把自己近期做过的题目(衡量标准为洛谷蓝题难度或以上)整理一下,归归类,简单地写一下思路,就当作自己复习了吧qwq 本随笔持续 ...
- NOIP刷题
搜索 [NOIP2013]华容道 最短路+带剪枝的搜索,是一个思维难度比较大的题目. CF1064D Labyrinth 考虑贪心,用双向队列bfs [NOIP2017]宝藏 剪枝搜索出奇迹 题解:h ...
- LA 3231 - Fair Share
You are given N processors and M jobs to be processed. Two processors are specified to each job. To ...
- Codeforces CF#628 Education 8 F. Bear and Fair Set
F. Bear and Fair Set time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- java线程 公平锁 ReentrantLock(boolean fair)
一.公平锁 1.为什么有公平锁 CPU在调度线程的时候是在等待队列里随机挑选一个线程,由于这种随机性所以是无法保证线程先到先得的(synchronized控制的锁就是这种非公平锁).但这样就会产生饥饿 ...
- Fair Scheduler 队列设置经验总结
Fair Scheduler 队列设置经验总结 由于公司的hadoop集群的计算资源不是很充足,需要开启yarn资源队列的资源抢占.在使用过程中,才明白资源抢占的一些特点.在这里总结一下. 只有一个队 ...
- Fair Scheduler中的Delay Schedule分析
延迟调度的主要目的是提高数据本地性(data locality),减少数据在网络中的传输.对于那些输入数据不在本地的MapTask,调度器将会延迟调度他们,而把slot分配给那些具备本地性的MapTa ...
- Hadoop学习之--Fair Scheduler作业调度分析
Fair Scheduler调度器同步心跳分配任务的过程简单来讲会经历以下环节: 1. 对map/reduce是否已经达到资源上限的循环判断 2. 对pool队列根据Fair算法排序 3.然后循环po ...
随机推荐
- 第十七章-异步IO
异步IO的出现源自于CPU速度与IO速度完全不匹配 一般的可以采用多线程或者多进程的方式来解决IO等待的问题 同样异步IO也可以解决同步IO所带来的问题 常见的异步IO的实现方式是使用一个消息循环, ...
- linux命令学习笔记(6):rmdir 命令
今天学习一下linux中命令: rmdir命令.rmdir是常用的命令,该命令的功能是删除空目录,一个目录 被删除之前必须是空的.(注意,rm - r dir命令可代替rmdir,但是有很大危险性.) ...
- Arc066_E Addition and Subtraction Hard
传送门 题目大意 给定一个加减法的表达式,让你任意的添加合法的括号对,使的表达式最大. 题解 考虑到任意左括号一定加在减号右边,那么对于第一个左括号,与该左括号相邻的只含有加号的子序列的贡献一定为负, ...
- Codechef Union on Tree
Codechef Union on Tree https://www.codechef.com/problems/BTREE 简要题意: 给你一棵树,\(Q\)次询问,每次给出一个点集和每个点的\(r ...
- [SPOJ-DISUBSTR]Distinct Substrings
vjudge 题意 给你一个串,求不同字串个数. \(n\le10^5\) sol 直接建SAM然后输出\(\sum_{i=1}^{tot}len[i]-len[fa[i]]\) code #incl ...
- XP系统下显示文件或文件的安全选项卡
在很多的时候,我们需要设置文件或文件夹的权限,这里一般就要用到安全选项卡,但在xp系统下,默认是不显示的,如何调出我们的“安全”选项卡呢? 具体做法:点击“工具”菜单下的"文件夹选项(o). ...
- 洛谷【P1177】【模板】基数排序
题目传送门:https://www.luogu.org/problemnew/show/P1177 我对计数排序的理解:https://www.cnblogs.com/AKMer/p/9649032. ...
- ABP源码学习目录
ABP源码理解笔记 之前看过abp源码,但是时间久了很多也不记得了,所以近期打算重新看一遍,顺便做下笔记. 目录如下: Abp 框架启动流程分析 模块系统 依赖注入 模块配置 系统设置 工作单元的实现 ...
- [51nod1113]矩阵快速幂
解题关键:模板题,方便以后熟悉 #include<bits/stdc++.h> using namespace std; typedef long long ll; struct mat{ ...
- SpringSecurity02 表单登录、SpringSecurity配置类
1 功能需求 springSecuriy默认的登录窗口是一个弹出窗口,而且会默认对所有的请求都进行拦截:要求更改登录页面(使用表单登录).排除掉一些请求的拦截 2 编写一个springSecurity ...