Codeforces 986A. Fair(对物品bfs暴力求解)
2024-08-31 13:08:27
解题思路:
1.对物品i bfs,更新每个小镇j获得每个物品i的最短距离。
2.时间复杂度o(n*k),满足2s的要求。
代码:
#include <iostream>
#include <queue>
#include <list>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std;
typedef long long ll;
#define MAX 2000000000 int a[];
list <int> e[];
int d[][];
bool used[];
queue <int> q; int main(){
// fill(d[0],d[0]+500050*110,MAX);
int n,m,k,s;
scanf("%d%d%d%d", &n, &m, &k, &s);
for(int i = ;i <= n; ++i){
scanf("%d", &a[i]);
}
int u,v;
for(int i = ;i <= m; ++i){
scanf("%d%d", &u, &v);
e[u].push_back(v);
e[v].push_back(u);
}
for(int i = ;i <= k; ++i){
memset(used,false,sizeof(used));
for(int j = ;j <= n; ++j){
if(a[j] == i){
d[j][i] = ;
q.push(j);
used[j] = true;
}
}
while(q.size()){
int x = q.front();
for(auto l:e[x]){
if(!used[l]){
d[l][i] = d[x][i]+;
used[l] = true;
q.push(l);
}
}
q.pop();
}
}
for(int i = ;i <= n; ++i){
sort(d[i]+,d[i]++k);
int ans = ;
for(int j = ;j <= s; ++j){
ans += d[i][j];
}
printf("%d ",ans);
}
printf("\n");
return ;
}
最新文章
- CCNA实验1.port-security
- Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
- smarty模板的基础搭建
- HDU 4465 - Candy(概率与数学优化)
- 客户端脚本语言javascript
- mongodb 学习笔记 09 -- shard分片
- SVG基础
- 转:shell比较两个字符串是否相等
- HTTP协议的请求和响应学习
- NullPointerException
- springcloud(三):服务提供与调用
- Java设计模式汇总
- js 在iframe子页面获取父页面元素,或在父页面 获取iframe子页面的元素的几种方式
- Python学习笔记第二十六周(Django补充)
- pca , nmds , pcoa 图添加分组的椭圆
- Java IO留存查看
- 20155229《网络对抗技术》Exp8:Web基础
- UML类图之间的关系
- mysql出现Too many connections的解决...
- Spring Boot war包&;jar包对比