![]()
![]()
1 #include <bits/stdc++.h>
2 using namespace std;
3
4 bool cmp(pair<int,int> a, pair<int,int> b){
5 if(a.second > b.second) return 1;
6 if(a.second==b.second) return a.first < b.first;
7 return 0;
8 }
9
10 int main(){
11 int t;
12 cin>>t;
13 while(t--){
14 int m,i,n;
15 cin>>m>>i>>n;
16 int k;
17 cin>>k;
18
19 vector<vector<int> > graph( m, vector<int>(m,0) );
20 int ki,kj,kw;
21 for(int i=0; i<k; i++){
22 cin>>ki>>kj>>kw;
23 graph[ki][kj] = kw;
24 graph[kj][ki] = kw;
25 }
26
27 vector<bool> visited(m,0);
28 vector<int> friendly(m,-1);
29 queue<int> temp;
30 temp.push(i);
31 while(!temp.empty() ){
32 int size = temp.size();
33 while(size--){
34 int cur = temp.front();
35 temp.pop();
36 visited[cur] = 1;
37 for(int x=0; x<m; x++){
38 if( !visited[x] && graph[cur][x] > 0 && friendly[x]==-1 ){
39 friendly[x] = friendly[cur] + graph[cur][x];
40 temp.push(x);
41 }
42 }
43 }
44
45 n--;
46 if(n==0) break;
47 }
48
49 if(n!=0 || temp.empty()){
50 cout<<-1<<endl;
51 continue;
52 }
53
54 vector<pair<int,int> > res;
55
56 map<int,int> exist;
57 while(!temp.empty()){
58 exist[ temp.front() ] = friendly[ temp.front() ];
59 temp.pop();
60 }
61 res.assign(exist.begin(), exist.end() );
62
63 sort(res.begin(), res.end(), cmp);
64 for(int p=0;p<res.size(); p++){
65 cout<<res[p].first<<" ";
66 }
67 cout<<endl;
68
69 }
70
71 }