File tree Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Original file line number Diff line number Diff line change
1
+ /** THIS IS AN OUTPUT FILE. NOT EDIT THIS FILE DIRECTLY. **/
2
+ use proconio:: input;
3
+ use proconio:: marker:: * ;
4
+ use std:: cmp:: Reverse ;
5
+ use std:: collections:: * ;
6
+
7
+ struct Helper {
8
+ n : usize ,
9
+ m : usize ,
10
+ memo : Vec < Vec < usize > > ,
11
+ c : Vec < usize > ,
12
+ result : usize
13
+ }
14
+
15
+ impl Helper {
16
+ fn dfs ( & mut self , i : usize , arr : & mut Vec < usize > ) {
17
+ if i == self . n {
18
+ let mut count = vec ! [ 0 ; self . m] ;
19
+ let mut temp = 0 ;
20
+
21
+ for j in 0 ..self . n {
22
+ let v = arr[ j] ;
23
+ for k in & self . memo [ j] {
24
+ count[ * k] += v;
25
+ }
26
+
27
+ temp += self . c [ j] * v;
28
+ }
29
+
30
+ let mut flag = true ;
31
+ for j in 0 ..self . m {
32
+ if count[ j] < 2 {
33
+ flag = false ;
34
+ break ;
35
+ }
36
+ }
37
+
38
+ if flag {
39
+ self . result = self . result . min ( temp) ;
40
+ }
41
+
42
+ return ;
43
+ }
44
+
45
+ for j in 0 ..3 {
46
+ arr. push ( j) ;
47
+ self . dfs ( i+1 , arr) ;
48
+ arr. pop ( ) ;
49
+ }
50
+ }
51
+ }
52
+
53
+ fn main ( ) {
54
+ input ! {
55
+ n: usize ,
56
+ m: usize ,
57
+ c: [ usize ; n] ,
58
+ }
59
+
60
+ let mut memo = vec ! [ vec![ ] ; n] ;
61
+ for i in 0 ..m {
62
+ input ! {
63
+ k: usize ,
64
+ a: [ Usize1 ; k]
65
+ }
66
+ for j in a {
67
+ memo[ j] . push ( i) ;
68
+ }
69
+ }
70
+
71
+ let mut helper = Helper {
72
+ n,
73
+ m,
74
+ memo,
75
+ c,
76
+ result : usize:: MAX
77
+ } ;
78
+ helper. dfs ( 0 , & mut vec ! [ ] ) ;
79
+
80
+ println ! ( "{}" , helper. result) ;
81
+ }
You can’t perform that action at this time.
0 commit comments