CCF(317号子任务)-35分:Dijikstra算法
317号子任务
201903-5
为了过前60分,想使用dijikstra优化算法的,但是最后还是只过了35分。这里的思路只需要先将所有的行星据点进行一次dijikstra,分别存储所有点到行星的最短距离,最后使用一个优先队列存储所有的距离就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<queue>
#include<functional>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int pro[10004];
int graph[10004][10004];
int n,m,k;
struct node{
int dis;//表示起点到终点的距离
int id;//表示终点的序号
node(){}
node(int a,int b):dis(a),id(b){}
bool operator<(const node& t)const{
return dis>t.dis;
}
};
struct edge{
int to;
int cost;
edge(){}
edge(int a,int b):to(a),cost(b){}
};
vector<edge>G[10004];
priority_queue<int,vector<int>,greater<int> >dis[10004];
void dijikstra(int s){
priority_queue<node>que;//最短路小的优先级高
int d[10004];
memset(d,INF,sizeof(d));
d[s]=0;
que.push(node(0,s));
while(!que.empty()){
node no=que.top();
que.pop();
int v=no.id;
if(d[v]<no.dis){
continue;
}
dis[v].push(no.dis);
for(int i=0;i<G[v].size();i++){
edge e=G[v][i];
if(d[e.to]>d[v]+e.cost){
d[e.to]=d[v]+e.cost;
que.push(node(d[e.to],e.to));
}
}
}
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
cin>>pro[i];
}
int x,y,z;
memset(graph,INF,sizeof(graph));
for(int i=0;i<m;i++){
cin>>x>>y>>z;
graph[x][y]=graph[y][x]=min(graph[x][y],z);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j&&graph[i][j]!=INF)
G[i].push_back(edge(j,graph[i][j]));
}
}
for(int i=1;i<=n;i++){
if(pro[i]==1){
dijikstra(i);
}
}
for(int i=1;i<=n;i++){
int sum=0;
int cnt=k;
while(!dis[i].empty()&&cnt>0){
cnt--;
sum+=dis[i].top();
dis[i].pop();
}
cout<<sum<<endl;
}
//system("pause");
return 0;
}
CCF(317号子任务)-35分:Dijikstra算法的更多相关文章
- 第16次CCF CSP认证-第5题-317 号子任务(subtask317)-图论最短路径
[题目背景]“你在平原上走着走着,突然迎面遇到一堵墙,这墙向上无限高,向下无限深,向左无限远,向右无限远,这墙是什么?”——<流浪地球>原著我们带着地球去流浪了,为了处理流浪过程中可能会发 ...
- PTA 7-1 畅通工程之局部最小花费问题(35 分)
7-1 畅通工程之局部最小花费问题(35 分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的 ...
- PTA 7-4 最小生成树的唯一性 (35分)
PTA 7-4 最小生成树的唯一性 (35分) 给定一个带权无向图,如果是连通图,则至少存在一棵最小生成树,有时最小生成树并不唯一.本题就要求你计算最小生成树的总权重,并且判断其是否唯一. 输入格式: ...
- PTA 7-2 畅通工程之局部最小花费问题 (35分)
PTA 7-2 畅通工程之局部最小花费问题 (35分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实 ...
- PAT TOP 1005 Programming Pattern (35 分)哈希做法
1005 Programming Pattern (35 分) Programmers often have a preference among program constructs. For ex ...
- CCF(地铁修建):向前星+dijikstra+求a到b所有路径中最长边中的最小值
地铁修建 201703-4 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值. 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的 ...
- POJ-3159(差分约束+Dijikstra算法+Vector优化+向前星优化+java快速输入输出)
Candies POJ-3159 这里是图论的一个应用,也就是差分约束.通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时). #include< ...
- LEACH分簇算法实现和能量控制算法实现
一.前言 1.在给定WSN的节点数目(100)前提下,节点随机分布,按照LEACH算法,实现每一轮对WSN的分簇.记录前K轮(k=10)时,网络的分簇情况,即每个节点的角色(簇头或簇成员).标记节点之 ...
- ccf 201903-5 317号子任务(60分)
看到这题,第一印象,用dijkstra算法求n次单源最短路,时间复杂度O(n^3),超时30分妥妥的. 于是用优先队列优化,O(n*mlogm),快很多,但依然30. 那么不妨换一种思路,题目要求的是 ...
随机推荐
- 牛客小白月赛28 J.树上行走 (并查集,dfs)
题意:有\(n\)个点,\(n-1\)条边,每个点的类型是\(0\)或\(1\),现在让你选一个点,然后所有与该点类型不同的点直接消失,问选哪些点之后,该点所在的联通块最大. 题解: 因为选完之后两个 ...
- Python-collections模块之defaultdict
defaultdict defaultdict 是 dict 类型的子类,正如其名,初始化时,可以给key指定默认值,什么意思呢?直接看代码.如果是普通的dict对象,访问一个不存在的key时,会报错 ...
- 2017.8.11 think list
递推式与模数不互质,如何利用中国剩余定理综合答案
- vue & this.$copyText
vue & this.$copyText click copy https://www.npmjs.com/package/vue-clipboard2 <p>{{message2 ...
- 使用 Jenkins 搭建 CI/CD All In One
使用 Jenkins 搭建 CI/CD All In One https://ci.jenkins.io/ https://www.jenkins.io/zh/ jobs pipelines refs ...
- linux bash which
linux bash which https://linuxize.com/post/linux-which-command/ Linux which command is used to ident ...
- TypeScript & Examples
TypeScript & Examples http://www.typescriptlang.org/samples/index.html https://github.com/Micros ...
- iPad pro & Mac mini
iPad pro & Mac mini
- qt 移动窗口MoveWindow
RECT r; GetWindowRect(this->gameHwnd, &r); // 获取窗口的宽度和高度 int nWidth = r.right - r.left; int n ...
- Mila Fletcher:日常理财应注意的五点
米拉·弗莱彻于2007年毕业于耶鲁大学,她是一名真正意义上的法学博士,在校期间获得了马歇尔奖学金,毕业后曾在美国多家知名律师事务所任职,目前就职于星盟全球投资公司,专注于帮助公司和客户提供法务咨询,他 ...