-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathrace3.java
104 lines (100 loc) · 2.8 KB
/
race3.java
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
ID: sireric1
TASK: race3
LANG: JAVA
*/
import java.io.*;
import java.util.*;
class race3{
static int N = 0;
static boolean vis[];
static ArrayList<Integer> graph[];
static void bfs(int start, int avoid){
for(int i = 0; i < 101; i++){
vis[i] = false;
}
Queue<Integer> q = new LinkedList<Integer>();
q.add(start);
while(!q.isEmpty()){
int id = q.remove();
if(id == avoid || vis[id]){
continue;
}
vis[id] = true;
for(int i : graph[id]){
q.add(i);
}
}
}
public static void main(String args[]) throws IOException{
BufferedReader br = new BufferedReader(new FileReader("race3.in"));
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("race3.out")));
graph = new ArrayList[101];
vis = new boolean[101];
while(true){
StringTokenizer st = new StringTokenizer(br.readLine());
int nxt = 0;
graph[N] = new ArrayList<Integer>();
while(true){
nxt = Integer.parseInt(st.nextToken());
if(nxt < 0){
break;
}
graph[N].add(nxt);
}
if(nxt == -1){
break;
}
N++;
}
ArrayList<Integer> ans1 = new ArrayList<Integer>();
for(int i = 1; i < N-1; i++){
bfs(0, i);
boolean good = true;
for(int j = 0; j < N; j++){
if(j == i) continue;
good &= vis[j];
}
if(!good){
ans1.add(i);
}
}
if(ans1.size() == 0){
pw.println(0);
}else{
pw.print(ans1.size() + " ");
for(int i = 0; i < ans1.size()-1; i++){
pw.print(ans1.get(i) + " ");
}
pw.println(ans1.get(ans1.size()-1));
}
ArrayList<Integer> ans2 = new ArrayList<Integer>();
for(int i : ans1){
bfs(0, i);
ArrayList<Integer> r1 = new ArrayList<Integer>();
for(int j = 0; j < N; j++){
if(vis[j]){
r1.add(j);
}
}
bfs(i, -1);
boolean good = false;
for(int j : r1){
good |= vis[j];
}
if(!good){
ans2.add(i);
}
}
if(ans2.size() == 0){
pw.println(0);
}else{
pw.print(ans2.size() + " ");
for(int i = 0; i < ans2.size()-1; i++){
pw.print(ans2.get(i) + " ");
}
pw.println(ans2.get(ans2.size()-1));
}
pw.close();
}
}