import java.io.*; import java.util.*;
public class mergers{
static class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br = new BufferedReader(new
InputStreamReader(System.in));
}
String next()
{
while (st == null || !st.hasMoreElements())
{
try
{
st = new StringTokenizer(br.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
}
static int MOD=998244353;
static int[] par,dep;
static int[] skip;
public static void main(String[] args){
FastReader br=new FastReader();
int N=br.nextInt(); int M=br.nextInt();
ArrayList<Integer> states[]=new ArrayList[M]; for(int i=0;i<M;i++){states[i]=new ArrayList<>();}
ArrayList<Integer> adj[]=new ArrayList[N]; for(int i=0;i<N;i++){adj[i]=new ArrayList<>();}
int a,b;
for (int i = 0; i < N-1; i++) {
a=br.nextInt()-1; b=br.nextInt()-1; adj[a].add(b); adj[b].add(a);
}
for (int i = 0; i < N; i++) {
a=br.nextInt()-1; states[a].add(i);
}
par=new int[N]; dep=new int[N];
Queue<Integer> qu=new LinkedList<>(); qu.add(0);
while(!qu.isEmpty()){
int p=qu.poll();
for (int i : adj[p]) {
if(i==par[p])continue;
par[i]=p; dep[i]=dep[p]+1; qu.add(i);
}
}
skip=new int[N];//Skipping: avoiding repeated merging
for (int i = 0; i < N; i++) {
skip[i]=i;
}
int u;
for (int i = 0; i < M; i++) {
if(states[i].isEmpty())continue;
u=states[i].get(0);
for (int j = 1; j < states[i].size(); j++) {
a=u; b=states[i].get(j);
while(a!=b){
if(dep[a]>=dep[b]){
skip[a]=find(par[a]); a=skip[a];
}else{
skip[b]=find(par[b]); b=skip[b];
}
}
//For each a, we have merged a with its 1st, .., kth ancestor.
//They belong to the same state
}
}
//In the end, all vertices of the same state have the same skip
//Therefore, after merging, if two vertices don't have some skip, they are not in the same state
int[] deg=new int[N];
for (int i = 0; i < N; i++) {
a=find(i);
for (int j : adj[i]) {
if(a!=find(j)){
//Notice in the compressed form, there is only one leader for each state, namely j
//If i is adjacent to two vertices with same find, i must have that find too
deg[a]++;
}
}
}
//System.out.println(Arrays.toString(deg));
int ans=0;
for (int i = 0; i < N; i++) {
if(deg[i]==1)ans++;
}
System.out.println((ans+1)/2);
//If a state is a leaf, there exist exactly one
}
public static int find(int x){
if(skip[x]==x)return x;
skip[x]=find(skip[x]); return skip[x];
}
/*
public static void dfs(ArrayList<Integer>[] adj, int p, int v){
for (int c : adj[v]) {
if(c==p)continue;
dep[c]=dep[v]+1; par[c]=v; dfs(adj,v,c);
}
}*/
}
//Debugging:
//Are you sure your algorithm is correct?
//Bounds: long
//Special cases: n=0,1?
//Make sure you remove your debugging code before you submit!
Compilation message
Note: mergers.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
73 ms |
8428 KB |
Output is correct |
2 |
Correct |
76 ms |
8556 KB |
Output is correct |
3 |
Correct |
76 ms |
8556 KB |
Output is correct |
4 |
Correct |
73 ms |
8448 KB |
Output is correct |
5 |
Correct |
73 ms |
8556 KB |
Output is correct |
6 |
Correct |
79 ms |
8556 KB |
Output is correct |
7 |
Correct |
73 ms |
8664 KB |
Output is correct |
8 |
Correct |
79 ms |
8556 KB |
Output is correct |
9 |
Correct |
71 ms |
8588 KB |
Output is correct |
10 |
Correct |
73 ms |
8556 KB |
Output is correct |
11 |
Correct |
77 ms |
8536 KB |
Output is correct |
12 |
Correct |
75 ms |
8556 KB |
Output is correct |
13 |
Correct |
74 ms |
8428 KB |
Output is correct |
14 |
Correct |
77 ms |
8560 KB |
Output is correct |
15 |
Correct |
79 ms |
8556 KB |
Output is correct |
16 |
Correct |
72 ms |
8428 KB |
Output is correct |
17 |
Correct |
72 ms |
8556 KB |
Output is correct |
18 |
Correct |
77 ms |
8596 KB |
Output is correct |
19 |
Correct |
72 ms |
8540 KB |
Output is correct |
20 |
Correct |
71 ms |
8556 KB |
Output is correct |
21 |
Correct |
76 ms |
8556 KB |
Output is correct |
22 |
Correct |
76 ms |
8684 KB |
Output is correct |
23 |
Correct |
71 ms |
8556 KB |
Output is correct |
24 |
Correct |
73 ms |
8556 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
73 ms |
8428 KB |
Output is correct |
2 |
Correct |
76 ms |
8556 KB |
Output is correct |
3 |
Correct |
76 ms |
8556 KB |
Output is correct |
4 |
Correct |
73 ms |
8448 KB |
Output is correct |
5 |
Correct |
73 ms |
8556 KB |
Output is correct |
6 |
Correct |
79 ms |
8556 KB |
Output is correct |
7 |
Correct |
73 ms |
8664 KB |
Output is correct |
8 |
Correct |
79 ms |
8556 KB |
Output is correct |
9 |
Correct |
71 ms |
8588 KB |
Output is correct |
10 |
Correct |
73 ms |
8556 KB |
Output is correct |
11 |
Correct |
77 ms |
8536 KB |
Output is correct |
12 |
Correct |
75 ms |
8556 KB |
Output is correct |
13 |
Correct |
74 ms |
8428 KB |
Output is correct |
14 |
Correct |
77 ms |
8560 KB |
Output is correct |
15 |
Correct |
79 ms |
8556 KB |
Output is correct |
16 |
Correct |
72 ms |
8428 KB |
Output is correct |
17 |
Correct |
72 ms |
8556 KB |
Output is correct |
18 |
Correct |
77 ms |
8596 KB |
Output is correct |
19 |
Correct |
72 ms |
8540 KB |
Output is correct |
20 |
Correct |
71 ms |
8556 KB |
Output is correct |
21 |
Correct |
76 ms |
8556 KB |
Output is correct |
22 |
Correct |
76 ms |
8684 KB |
Output is correct |
23 |
Correct |
71 ms |
8556 KB |
Output is correct |
24 |
Correct |
73 ms |
8556 KB |
Output is correct |
25 |
Correct |
75 ms |
8540 KB |
Output is correct |
26 |
Correct |
300 ms |
14672 KB |
Output is correct |
27 |
Correct |
293 ms |
14432 KB |
Output is correct |
28 |
Correct |
304 ms |
14688 KB |
Output is correct |
29 |
Correct |
302 ms |
14688 KB |
Output is correct |
30 |
Correct |
290 ms |
14304 KB |
Output is correct |
31 |
Correct |
73 ms |
8556 KB |
Output is correct |
32 |
Correct |
305 ms |
14904 KB |
Output is correct |
33 |
Correct |
76 ms |
8684 KB |
Output is correct |
34 |
Correct |
298 ms |
14696 KB |
Output is correct |
35 |
Correct |
296 ms |
14800 KB |
Output is correct |
36 |
Correct |
294 ms |
14480 KB |
Output is correct |
37 |
Correct |
295 ms |
14688 KB |
Output is correct |
38 |
Correct |
82 ms |
8684 KB |
Output is correct |
39 |
Correct |
328 ms |
14884 KB |
Output is correct |
40 |
Correct |
342 ms |
14440 KB |
Output is correct |
41 |
Correct |
320 ms |
14548 KB |
Output is correct |
42 |
Correct |
296 ms |
14644 KB |
Output is correct |
43 |
Correct |
290 ms |
14560 KB |
Output is correct |
44 |
Correct |
77 ms |
8556 KB |
Output is correct |
45 |
Correct |
348 ms |
14776 KB |
Output is correct |
46 |
Correct |
349 ms |
14816 KB |
Output is correct |
47 |
Correct |
82 ms |
8704 KB |
Output is correct |
48 |
Correct |
293 ms |
14688 KB |
Output is correct |
49 |
Correct |
298 ms |
14816 KB |
Output is correct |
50 |
Correct |
296 ms |
14688 KB |
Output is correct |
51 |
Correct |
298 ms |
14552 KB |
Output is correct |
52 |
Correct |
295 ms |
14560 KB |
Output is correct |
53 |
Correct |
293 ms |
14740 KB |
Output is correct |
54 |
Correct |
294 ms |
14688 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
73 ms |
8428 KB |
Output is correct |
2 |
Correct |
76 ms |
8556 KB |
Output is correct |
3 |
Correct |
76 ms |
8556 KB |
Output is correct |
4 |
Correct |
73 ms |
8448 KB |
Output is correct |
5 |
Correct |
73 ms |
8556 KB |
Output is correct |
6 |
Correct |
79 ms |
8556 KB |
Output is correct |
7 |
Correct |
73 ms |
8664 KB |
Output is correct |
8 |
Correct |
79 ms |
8556 KB |
Output is correct |
9 |
Correct |
71 ms |
8588 KB |
Output is correct |
10 |
Correct |
73 ms |
8556 KB |
Output is correct |
11 |
Correct |
77 ms |
8536 KB |
Output is correct |
12 |
Correct |
75 ms |
8556 KB |
Output is correct |
13 |
Correct |
74 ms |
8428 KB |
Output is correct |
14 |
Correct |
77 ms |
8560 KB |
Output is correct |
15 |
Correct |
79 ms |
8556 KB |
Output is correct |
16 |
Correct |
72 ms |
8428 KB |
Output is correct |
17 |
Correct |
72 ms |
8556 KB |
Output is correct |
18 |
Correct |
77 ms |
8596 KB |
Output is correct |
19 |
Correct |
72 ms |
8540 KB |
Output is correct |
20 |
Correct |
71 ms |
8556 KB |
Output is correct |
21 |
Correct |
76 ms |
8556 KB |
Output is correct |
22 |
Correct |
76 ms |
8684 KB |
Output is correct |
23 |
Correct |
71 ms |
8556 KB |
Output is correct |
24 |
Correct |
73 ms |
8556 KB |
Output is correct |
25 |
Correct |
75 ms |
8556 KB |
Output is correct |
26 |
Correct |
808 ms |
40560 KB |
Output is correct |
27 |
Correct |
752 ms |
35764 KB |
Output is correct |
28 |
Correct |
292 ms |
14560 KB |
Output is correct |
29 |
Correct |
75 ms |
8556 KB |
Output is correct |
30 |
Correct |
74 ms |
8808 KB |
Output is correct |
31 |
Correct |
766 ms |
35684 KB |
Output is correct |
32 |
Correct |
291 ms |
14684 KB |
Output is correct |
33 |
Correct |
806 ms |
37604 KB |
Output is correct |
34 |
Correct |
803 ms |
35576 KB |
Output is correct |
35 |
Correct |
318 ms |
14600 KB |
Output is correct |
36 |
Correct |
810 ms |
35812 KB |
Output is correct |
37 |
Correct |
342 ms |
14432 KB |
Output is correct |
38 |
Correct |
296 ms |
14580 KB |
Output is correct |
39 |
Correct |
768 ms |
39720 KB |
Output is correct |
40 |
Correct |
293 ms |
14796 KB |
Output is correct |
41 |
Correct |
729 ms |
35556 KB |
Output is correct |
42 |
Correct |
788 ms |
36808 KB |
Output is correct |
43 |
Correct |
76 ms |
8684 KB |
Output is correct |
44 |
Correct |
800 ms |
36744 KB |
Output is correct |
45 |
Correct |
788 ms |
36836 KB |
Output is correct |
46 |
Correct |
297 ms |
14816 KB |
Output is correct |
47 |
Correct |
302 ms |
14560 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
766 ms |
36804 KB |
Output is correct |
2 |
Correct |
822 ms |
44132 KB |
Output is correct |
3 |
Correct |
299 ms |
14576 KB |
Output is correct |
4 |
Correct |
293 ms |
14432 KB |
Output is correct |
5 |
Correct |
75 ms |
8556 KB |
Output is correct |
6 |
Correct |
76 ms |
8556 KB |
Output is correct |
7 |
Correct |
295 ms |
14680 KB |
Output is correct |
8 |
Correct |
805 ms |
38508 KB |
Output is correct |
9 |
Correct |
293 ms |
14560 KB |
Output is correct |
10 |
Correct |
765 ms |
35412 KB |
Output is correct |
11 |
Correct |
78 ms |
8556 KB |
Output is correct |
12 |
Correct |
769 ms |
35452 KB |
Output is correct |
13 |
Correct |
802 ms |
38456 KB |
Output is correct |
14 |
Correct |
879 ms |
46992 KB |
Output is correct |
15 |
Correct |
762 ms |
39632 KB |
Output is correct |
16 |
Correct |
299 ms |
14688 KB |
Output is correct |
17 |
Correct |
75 ms |
8556 KB |
Output is correct |
18 |
Correct |
824 ms |
47900 KB |
Output is correct |
19 |
Correct |
840 ms |
46768 KB |
Output is correct |
20 |
Correct |
345 ms |
14800 KB |
Output is correct |
21 |
Correct |
79 ms |
8556 KB |
Output is correct |
22 |
Correct |
858 ms |
43512 KB |
Output is correct |
23 |
Correct |
299 ms |
14628 KB |
Output is correct |
24 |
Correct |
766 ms |
35940 KB |
Output is correct |
25 |
Correct |
832 ms |
46480 KB |
Output is correct |
26 |
Correct |
297 ms |
14760 KB |
Output is correct |
27 |
Correct |
293 ms |
14688 KB |
Output is correct |
28 |
Correct |
294 ms |
14756 KB |
Output is correct |
29 |
Correct |
293 ms |
14560 KB |
Output is correct |
30 |
Correct |
297 ms |
14560 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
73 ms |
8428 KB |
Output is correct |
2 |
Correct |
76 ms |
8556 KB |
Output is correct |
3 |
Correct |
76 ms |
8556 KB |
Output is correct |
4 |
Correct |
73 ms |
8448 KB |
Output is correct |
5 |
Correct |
73 ms |
8556 KB |
Output is correct |
6 |
Correct |
79 ms |
8556 KB |
Output is correct |
7 |
Correct |
73 ms |
8664 KB |
Output is correct |
8 |
Correct |
79 ms |
8556 KB |
Output is correct |
9 |
Correct |
71 ms |
8588 KB |
Output is correct |
10 |
Correct |
73 ms |
8556 KB |
Output is correct |
11 |
Correct |
77 ms |
8536 KB |
Output is correct |
12 |
Correct |
75 ms |
8556 KB |
Output is correct |
13 |
Correct |
74 ms |
8428 KB |
Output is correct |
14 |
Correct |
77 ms |
8560 KB |
Output is correct |
15 |
Correct |
79 ms |
8556 KB |
Output is correct |
16 |
Correct |
72 ms |
8428 KB |
Output is correct |
17 |
Correct |
72 ms |
8556 KB |
Output is correct |
18 |
Correct |
77 ms |
8596 KB |
Output is correct |
19 |
Correct |
72 ms |
8540 KB |
Output is correct |
20 |
Correct |
71 ms |
8556 KB |
Output is correct |
21 |
Correct |
76 ms |
8556 KB |
Output is correct |
22 |
Correct |
76 ms |
8684 KB |
Output is correct |
23 |
Correct |
71 ms |
8556 KB |
Output is correct |
24 |
Correct |
73 ms |
8556 KB |
Output is correct |
25 |
Correct |
75 ms |
8540 KB |
Output is correct |
26 |
Correct |
300 ms |
14672 KB |
Output is correct |
27 |
Correct |
293 ms |
14432 KB |
Output is correct |
28 |
Correct |
304 ms |
14688 KB |
Output is correct |
29 |
Correct |
302 ms |
14688 KB |
Output is correct |
30 |
Correct |
290 ms |
14304 KB |
Output is correct |
31 |
Correct |
73 ms |
8556 KB |
Output is correct |
32 |
Correct |
305 ms |
14904 KB |
Output is correct |
33 |
Correct |
76 ms |
8684 KB |
Output is correct |
34 |
Correct |
298 ms |
14696 KB |
Output is correct |
35 |
Correct |
296 ms |
14800 KB |
Output is correct |
36 |
Correct |
294 ms |
14480 KB |
Output is correct |
37 |
Correct |
295 ms |
14688 KB |
Output is correct |
38 |
Correct |
82 ms |
8684 KB |
Output is correct |
39 |
Correct |
328 ms |
14884 KB |
Output is correct |
40 |
Correct |
342 ms |
14440 KB |
Output is correct |
41 |
Correct |
320 ms |
14548 KB |
Output is correct |
42 |
Correct |
296 ms |
14644 KB |
Output is correct |
43 |
Correct |
290 ms |
14560 KB |
Output is correct |
44 |
Correct |
77 ms |
8556 KB |
Output is correct |
45 |
Correct |
348 ms |
14776 KB |
Output is correct |
46 |
Correct |
349 ms |
14816 KB |
Output is correct |
47 |
Correct |
82 ms |
8704 KB |
Output is correct |
48 |
Correct |
293 ms |
14688 KB |
Output is correct |
49 |
Correct |
298 ms |
14816 KB |
Output is correct |
50 |
Correct |
296 ms |
14688 KB |
Output is correct |
51 |
Correct |
298 ms |
14552 KB |
Output is correct |
52 |
Correct |
295 ms |
14560 KB |
Output is correct |
53 |
Correct |
293 ms |
14740 KB |
Output is correct |
54 |
Correct |
294 ms |
14688 KB |
Output is correct |
55 |
Correct |
75 ms |
8556 KB |
Output is correct |
56 |
Correct |
808 ms |
40560 KB |
Output is correct |
57 |
Correct |
752 ms |
35764 KB |
Output is correct |
58 |
Correct |
292 ms |
14560 KB |
Output is correct |
59 |
Correct |
75 ms |
8556 KB |
Output is correct |
60 |
Correct |
74 ms |
8808 KB |
Output is correct |
61 |
Correct |
766 ms |
35684 KB |
Output is correct |
62 |
Correct |
291 ms |
14684 KB |
Output is correct |
63 |
Correct |
806 ms |
37604 KB |
Output is correct |
64 |
Correct |
803 ms |
35576 KB |
Output is correct |
65 |
Correct |
318 ms |
14600 KB |
Output is correct |
66 |
Correct |
810 ms |
35812 KB |
Output is correct |
67 |
Correct |
342 ms |
14432 KB |
Output is correct |
68 |
Correct |
296 ms |
14580 KB |
Output is correct |
69 |
Correct |
768 ms |
39720 KB |
Output is correct |
70 |
Correct |
293 ms |
14796 KB |
Output is correct |
71 |
Correct |
729 ms |
35556 KB |
Output is correct |
72 |
Correct |
788 ms |
36808 KB |
Output is correct |
73 |
Correct |
76 ms |
8684 KB |
Output is correct |
74 |
Correct |
800 ms |
36744 KB |
Output is correct |
75 |
Correct |
788 ms |
36836 KB |
Output is correct |
76 |
Correct |
297 ms |
14816 KB |
Output is correct |
77 |
Correct |
302 ms |
14560 KB |
Output is correct |
78 |
Correct |
766 ms |
36804 KB |
Output is correct |
79 |
Correct |
822 ms |
44132 KB |
Output is correct |
80 |
Correct |
299 ms |
14576 KB |
Output is correct |
81 |
Correct |
293 ms |
14432 KB |
Output is correct |
82 |
Correct |
75 ms |
8556 KB |
Output is correct |
83 |
Correct |
76 ms |
8556 KB |
Output is correct |
84 |
Correct |
295 ms |
14680 KB |
Output is correct |
85 |
Correct |
805 ms |
38508 KB |
Output is correct |
86 |
Correct |
293 ms |
14560 KB |
Output is correct |
87 |
Correct |
765 ms |
35412 KB |
Output is correct |
88 |
Correct |
78 ms |
8556 KB |
Output is correct |
89 |
Correct |
769 ms |
35452 KB |
Output is correct |
90 |
Correct |
802 ms |
38456 KB |
Output is correct |
91 |
Correct |
879 ms |
46992 KB |
Output is correct |
92 |
Correct |
762 ms |
39632 KB |
Output is correct |
93 |
Correct |
299 ms |
14688 KB |
Output is correct |
94 |
Correct |
75 ms |
8556 KB |
Output is correct |
95 |
Correct |
824 ms |
47900 KB |
Output is correct |
96 |
Correct |
840 ms |
46768 KB |
Output is correct |
97 |
Correct |
345 ms |
14800 KB |
Output is correct |
98 |
Correct |
79 ms |
8556 KB |
Output is correct |
99 |
Correct |
858 ms |
43512 KB |
Output is correct |
100 |
Correct |
299 ms |
14628 KB |
Output is correct |
101 |
Correct |
766 ms |
35940 KB |
Output is correct |
102 |
Correct |
832 ms |
46480 KB |
Output is correct |
103 |
Correct |
297 ms |
14760 KB |
Output is correct |
104 |
Correct |
293 ms |
14688 KB |
Output is correct |
105 |
Correct |
294 ms |
14756 KB |
Output is correct |
106 |
Correct |
293 ms |
14560 KB |
Output is correct |
107 |
Correct |
297 ms |
14560 KB |
Output is correct |
108 |
Correct |
2100 ms |
143228 KB |
Output is correct |
109 |
Correct |
2135 ms |
130964 KB |
Output is correct |
110 |
Correct |
2244 ms |
126572 KB |
Output is correct |
111 |
Correct |
2757 ms |
192572 KB |
Output is correct |
112 |
Correct |
2707 ms |
184928 KB |
Output is correct |
113 |
Correct |
2428 ms |
195096 KB |
Output is correct |
114 |
Correct |
2307 ms |
129640 KB |
Output is correct |
115 |
Correct |
2224 ms |
129416 KB |
Output is correct |
116 |
Correct |
2492 ms |
140852 KB |
Output is correct |
117 |
Correct |
2725 ms |
201104 KB |
Output is correct |
118 |
Correct |
2402 ms |
127060 KB |
Output is correct |
119 |
Correct |
2775 ms |
201000 KB |
Output is correct |
120 |
Correct |
2612 ms |
181172 KB |
Output is correct |
121 |
Correct |
2649 ms |
201412 KB |
Output is correct |
122 |
Correct |
2641 ms |
171272 KB |
Output is correct |
123 |
Correct |
2158 ms |
183520 KB |
Output is correct |
124 |
Correct |
2646 ms |
191228 KB |
Output is correct |