File tree Expand file tree Collapse file tree 1 file changed +66
-0
lines changed Expand file tree Collapse file tree 1 file changed +66
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+ #include < algorithm>
3
+ #include < vector>
4
+ #include < queue>
5
+ #include < cassert>
6
+
7
+ using namespace std ;
8
+
9
+ void solve () {
10
+ int n, m, s, e;
11
+ cin >> n >> m >> s >> e;
12
+
13
+ assert (1 <= n);
14
+ assert (1 <= m);
15
+ assert (1 <= s && s <= n);
16
+ assert (1 <= e && e <= n);
17
+
18
+ s--;
19
+ e--;
20
+
21
+ vector<int > dist (n, -1 );
22
+
23
+ vector<vector<int >> g (n);
24
+ for (int i = 0 ; i < m; i++) {
25
+ int u, v;
26
+ cin >> u >> v;
27
+ assert (1 <= u && u <= n);
28
+ assert (1 <= v && v <= n);
29
+ u--;
30
+ v--;
31
+ g[u].push_back (v);
32
+ g[v].push_back (u);
33
+ }
34
+
35
+ queue<int > q;
36
+ q.push (s);
37
+ dist[s] = 0 ;
38
+
39
+ while (!q.empty ()) {
40
+ int u = q.front (); q.pop ();
41
+ for (int v : g[u]) {
42
+ if (dist[v] == -1 ) {
43
+ dist[v] = dist[u] + 1 ;
44
+ q.push (v);
45
+ }
46
+ }
47
+ }
48
+
49
+ if (s == e) {
50
+ printf (" NO\n " );
51
+ } else if (dist[e] == -1 ) {
52
+ printf (" NO\n " );
53
+ } else {
54
+ printf (" YES %d\n " , max (0 , dist[e] - 1 ));
55
+ }
56
+ }
57
+
58
+ int main () {
59
+ int t;
60
+ cin >> t;
61
+ assert (1 <= t);
62
+
63
+ while (t--) {
64
+ solve ();
65
+ }
66
+ }
You can’t perform that action at this time.
0 commit comments