ccf 201903-5 317号子任务【60分】

ccf 201903-5 317号子任务【60分】_第1张图片

ccf 201903-5 317号子任务【60分】_第2张图片

ccf 201903-5 317号子任务【60分】_第3张图片

【样例 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

ccf 201903-5 317号子任务【60分】_第4张图片

ccf 201903-5 317号子任务【60分】_第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

 

你可能感兴趣的:(------OI------)