【样例 1 输入】
7 6 2
1 0 1 0 1 1 0
1 4 1
1 2 3
2 4 4
2 3 5
2 5 7
6 7 5
【样例 1 输出】
8
8
10
10
0
5
思路:
用dijkstra算法求n次单源最短路,时间复杂度O(n^3)
用优先队列优化,O(n*mlogm)
n指的是什么呢?
如果是据点数量,那只能拿30分。
注意:“行星发动机的数量和k相等”,说明可以从行星发动机的数量入手拿到60分。
题目要求的是任一据点到最近k个行星发动机据点的最短路之和,于是我们可以求k个行星发动机据点的最短路,
复杂度:O(k*mlogm)
#include
using namespace std;
struct E
{
int v,w;
bool operator < (const E&b)const
{
return w>b.w;
}
};
int n,m,k;
int ff[10000+10];
priority_queue,greater > d[10000];
vector edge[10000];
void dijkstra(int k)
{
priority_queue Q;
int dis[10000];
for(int i=0;idis[t.v]+w)
dis[u]=dis[t.v]+w,
Q.push((E){u,dis[u]});
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
int num=0,x;
for(int i=0;i