Submission
Status:
[P-SSSSSSSS][P-SSSSSSSSSSSSSS]
Score: 0
User: MiyaZaki1072
Problemset: 03.Looper
Language: cpp
Time: 0.048 second
Submitted On: 2025-04-28 19:50:22
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<int>adj[1010];
//dis[st][i] + (k-1)*(dis[i][j] + dis[j][i]); go st to i and then try go from i j j i to make a loop
ll dis[1010][1010],ans;
int n,m,st,k,idx;
queue<int>qu;
void bfs(int st){
qu.push(st);
dis[st][st]=0;
while(qu.size()){
int u = qu.front();qu.pop();
for(int v:adj[u]){
if(dis[st][v] > dis[st][u] + 1){
dis[st][v] = dis[st][u] + 1;
qu.push(v);
}
}
}
}
void solve(){
memset(dis,0x3f,sizeof dis);
ans=LLONG_MAX;
cin>>n>>m>>k>>st;
for(int i=1;i<=n;i++)adj[i].clear();
while(m--){
int u,v;cin>>u>>v;
adj[u].push_back(v);
}
for(int i=1;i<=n;i++)bfs(i);//N^2;
for(int i=1;i<=n;i++){
if(dis[st][i] > 1e9)continue;
for(int j=1;j<=n;j++){
if(i==j || dis[i][j] > 1e9 || dis[j][i] > 1e9)continue;
ll rn = dis[st][i] + (k-1) * (dis[i][j] + dis[j][i]);
if(rn < ans){
ans = rn;
idx = i;
}
else if(rn == ans)idx=min(idx,i);
}
}
if(ans > 1e9)cout<<-1<<'\n';
else cout<<ans<<" "<<idx<<"\n";
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int TC;cin>>TC;
while(TC--)solve();
}