滴滴笔试题-集合DFS


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import java.util.*;

public class Main {
public static boolean isReachable(List<Integer>[] g, int a, int b, boolean[] seen) {
seen[a] = true;
boolean tmp = false;
for (int i : g[a]) {
if (i == b) {
tmp = true;
} else {
if (!seen[i]) {
tmp = tmp || isReachable(g, i, b, seen);
}
}
}
return tmp;
}

public static int position(List<Integer> ls, int a) {
for (int i = 0; i < ls.size(); i++) {
if (ls.get(i) == a) {
return i;
}
}
return -1;
}

public static void show(List<Integer>[] g) {
System.out.println();
for (int i = 0; i < g.length; i++) {
System.out.println("g[" + i + "]: " + g[i]);
}
}

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = sc.nextInt();
sc.nextLine();
String[] nAndM = sc.nextLine().trim().split(" ");
int N = Integer.valueOf(nAndM[0]);
int M = Integer.valueOf(nAndM[1]);
List<Integer>[] g = new ArrayList[M];
for (int i = 0; i < N; i++) {
g[i] = new ArrayList<Integer>();
}
int[][] edges = new int[M][2];
for (int i = 0; i < M; i++) {
String[] edge = sc.nextLine().trim().split(" ");
edges[i][0] = Integer.valueOf(edge[0]) - 1;
edges[i][1] = Integer.valueOf(edge[1]) - 1;
g[Integer.valueOf(edge[0]) - 1].add(Integer.valueOf(edge[1]) - 1);
g[Integer.valueOf(edge[1]) - 1].add(Integer.valueOf(edge[0]) - 1);
}
// System.out.println();
// for (int i = 0; i < M; i++) {
// System.out.println(edges[i][0]+" "+edges[i][1]);
// }
boolean flag = true;
boolean[] seen = new boolean[N];
for (int[] e : edges) {
boolean is_tmp = false;
g[e[0]].remove(position(g[e[0]], e[1]));
g[e[1]].remove(position(g[e[1]], e[0]));
show(g);
for (int i = 1; i < N; i++) {
is_tmp = isReachable(g, 0, i, seen);
// System.out.println("i:" + i + "-->" + is_tmp);
if (!is_tmp) {
flag = false;
System.out.println("No");
System.exit(0);
} else {
for (int j = 0; j < N; j++) {
seen[j] = false;
}
}
}
g[e[0]].add(e[1]);
g[e[1]].add(e[0]);
}
if (flag) {
System.out.println("Yes");
}
}
}

0%