K-th Path CodeForces - 1196F

题目链接:https://vjudge.net/problem/CodeForces-1196F

题意:从图中找出第K短的最短路,最短路:从一个点到另一个的最短距离。

思路:题目说了,每两个点之间的边小于等于1,那么如果我们只取K条边,

那么顶点数  V∈[K,2K],所以我们一定可以在K条边中的到第K短的最短路。

当然我们先要把所有变来一个sort,取权值小的K条边。

之后跑一个floyd就可以了,然后把所有最短路存下来,找出第K小的最短路。

ps(这里的编号很方便,我是参考另一个大佬的,这里说明一下,当然也可以和我之前一样,

来个计数的慢慢编号)。


 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <queue>
 6 #include <map>
 7 #include <cmath>
 8 #include <iomanip>
 9 using namespace std;
10 
11 typedef long long LL;
12 #define inf (1LL << 60)
13 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
14 #define rep__(i,j,k) for(int i = (j); i < (k); i++)
15 #define per(i,j,k) for(int i = (j); i >= (k); i--)
16 #define per__(i,j,k) for(int i = (j); i > (k); i--)
17 
18 const int N = (int)2e5 + 10;
19 LL tmp[N];
20 LL dis[810][810];
21 int n,m,k;
22 map<int, int> s;
23 int tot;
24 
25 struct node{
26     int u;
27     int v;
28     int w;
29 
30     bool friend operator < (node a,node b){
31         return a.w < b.w;
32     }
33 
34 }o[N];    
35 
36 int ID(int x){
37     if(s.count(x)) return s[x];
38     return s[x] = ++tot;
39 }
40 
41 int main(){
42 
43     ios::sync_with_stdio(false);
44     cin.tie(0);
45 
46     cin >> n >> m >> k;
47 
48     int u,v,w,l = 0;
49     //存边
50     rep(i,1,m){
51         cin >> u >> v >> w;
52         o[l].u = u;
53         o[l].v = v;
54         o[l++].w = w;
55     }
56     //sort边,取前K条
57     sort(o,o + m);
58     
59     rep(i,1,805) rep(j,1,805){
60         if(i == j) dis[i][j] = 0;
61         else dis[i][j] = inf;
62     }
63 
64     //建图
65     rep__(i,0,min(m,k)){
66         dis[ID(o[i].u)][ID(o[i].v)] = dis[ID(o[i].v)][ID(o[i].u)] = o[i].w;
67     }
68 
69     rep(k,1,tot) rep(i,1,tot) rep(j,1,tot){
70         dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
71     }
72     
73     l = 0;
74     rep(i,1,tot) rep(j,i + 1,tot){
75         tmp[l++] = dis[i][j];
76     }
77 
78     sort(tmp, tmp + l);
79 
80     cout << tmp[k - 1] << endl;
81 
82     getchar();getchar();
83 
84     return 0;
85 }

 

posted @ 2019-08-08 16:37  SummerMingQAQ  阅读(232)  评论(0编辑  收藏  举报