Submission

Status:
[P-SSSSSSSS][PTSSSSSSSSSSSSSS]

Score: 0

User: pxsit

Problemset: 03.Looper

Language: cpp

Time: 1.089 second

Submitted On: 2025-03-31 07:58:18

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long

bool valid = false;

int n, m, k, s, last;
int city, mn = INT_MAX;

void dfs(int u, int c, vector<vector<int>> &adj, vector<bool> vis, vector<ll> &dis, set<int> traveled){
    // cout << u << endl;
    if(vis[u]){
        // cout << "travel: ";
        // for(auto i: traveled) cout << i << ' '; cout << endl;
        valid = true;
        if(mn>(c-dis[u])*(k-1)+dis[u]){
            mn = (c-dis[u])*(k-1)+dis[u];
            city = u;
        }else if(mn==(c-dis[u])*(k-1)+dis[u]){
            city = min(city,u);
        }return;
    }
    vis[u] = true;
    for(auto v: adj[u]){
        dis[v] = min(dis[v],dis[u]+1);
        traveled.insert(u);
        dfs(v,c+1,adj,vis,dis,traveled);
    }
}

void solve(){
    mn = INT_MAX;
    valid = false;
    cin >> n >> m >> k >> s;
    vector<vector<int>> adj(n+1);
    for(int i = 1, u, v; i <= m; i++){
        cin >> u >> v;
        adj[u].emplace_back(v);
    }
    vector<bool> vis(n+1,0);
    vector<ll> dis(n+1,1e18);
    set<int> traveled;
    dis[s] = 0;
    dfs(s,0,adj,vis,dis,traveled);
    // for(int i = 1; i <= n; i++) cout << dis[i] << ' '; cout << endl;
    // for(int i = 1; i <= n; i++) cout << vis[i] << ' '; cout << endl;
    if(!valid) cout << -1 << endl;
    else cout << mn << ' ' << city << endl;
    return;
}

int main(){
    cin.tie(nullptr)->sync_with_stdio(0);cout.tie(0);
    int t = 1;
    cin >> t;
    while(t--) solve();
    return 0;
}