-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathdiff_Main.cpp
More file actions
72 lines (69 loc) · 1.73 KB
/
Copy pathdiff_Main.cpp
File metadata and controls
72 lines (69 loc) · 1.73 KB
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
diff --git a/CodeJam/Main.cpp b/examples/2021/KS_F/D/Main.cpp
index 2150379..fceb0c5 100644
--- a/CodeJam/Main.cpp
+++ b/examples/2021/KS_F/D/Main.cpp
@@ -1570,11 +1570,67 @@ void init(){
cin >> T;
}
+ll N, M, K;
+ll Li[15], Ri[15], Ai[15];
+bool adj[15][15];
+
void readInput(){
+ cin >> N >> M >> K;
+ forn(i, N){
+ cin >> Li[i] >> Ri[i] >> Ai[i];
+ }
+ fill_n(adj[0], 15*15, 0);
+ forn(i, M){
+ ll Xi, Yi;
+ cin >> Xi >> Yi;
+ adj[Xi][Yi] = true;
+ adj[Yi][Xi] = true;
+ }
}
// write to COMM_TYPE result
void calcFunction() {
+ result = 0;
+ ll states[1<<15] = {};
+ states[0] = 1;
+ ll pointsums[1<<15] = {};
+ fornn(nvis, 1, N+1){
+ v(bool) vis(N, false);
+ forn(i, nvis){
+ vis[i] = true;
+ }
+ sort(all(vis));
+ do {
+ ll id = 0;
+ forn(i, N){
+ if(vis[i]){
+ id += (1<<i);
+ }
+ }
+ forn(i, N){
+ if(vis[i]) pointsums[id] += Ai[i];
+ }
+ forn(i, N){
+ if(!vis[i]) continue;
+ ll previd = id ^ (1<<i);
+ bool conn = false;
+ forn(j, N){
+ if(adj[i][j] && vis[j]) {
+ conn = true;
+ break;
+ }
+ }
+ if(previd == 0 || (conn && Li[i] <= pointsums[previd] && pointsums[previd] <= Ri[i])){
+ states[id] += states[previd];
+ }
+ }
+ } while(next_permutation(all(vis)));
+
+ }
+
+ forn(i, 1<<N){
+ if(pointsums[i] == K) result += states[i];
+ }
}
} // namespace task