Browse Source

Adaugare problema "asmax" si "dfs" pentru infoarena

master
Matei-Alexandru Gardus 7 months ago
parent
commit
cd849cee83
No known key found for this signature in database

+ 2
- 0
infoarena/CMakeLists.txt View File

@@ -3,8 +3,10 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.2.0)
3 3
 project("infoarena")
4 4
 
5 5
 add_subdirectory("atac")
6
+add_subdirectory("asmax")
6 7
 add_subdirectory("bemo")
7 8
 add_subdirectory("cautbin")
9
+add_subdirectory("dfs")
8 10
 add_subdirectory("heapuri")
9 11
 add_subdirectory("jap2")
10 12
 add_subdirectory("mexitate")

+ 7
- 0
infoarena/asmax/CMakeLists.txt View File

@@ -0,0 +1,7 @@
1
+CMAKE_MINIMUM_REQUIRED(VERSION 3.2.0)
2
+
3
+get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
4
+string(REPLACE " " "_" ProjectId ${ProjectId})
5
+project(${ProjectId})
6
+
7
+add_executable(${PROJECT_NAME} main.cpp)

+ 46
- 0
infoarena/asmax/main.cpp View File

@@ -0,0 +1,46 @@
1
+#include <fstream>
2
+#include <vector>
3
+#define INFINITY 1000000000
4
+#define NMAX 16000
5
+
6
+using namespace std;
7
+
8
+ifstream fin("asmax.in");
9
+ofstream fout("asmax.out");
10
+
11
+int n,                        // numarul de noduri
12
+    sol = -INFINITY,          // suma maxima finala, trebuie numar mic pentru maxim
13
+    val[NMAX + 1],            // valorile fiecarui nod. valoare[x] = valoarea nodului x
14
+    suma[NMAX + 1],           // suma[x] = suma pentru DFS din nod x
15
+    vizitat[NMAX + 1];        // vectorul de vizitare.
16
+vector<int> vecini[NMAX + 1]; // vectorul de vecini. vecini[x] = vecinii nodului x
17
+
18
+void dfs(int nod) {
19
+    vizitat[nod] = 1;
20
+    for (auto vecin : vecini[nod]) {
21
+        if (!vizitat[vecin]) {
22
+            dfs(vecin);
23
+            suma[nod] += max(suma[vecin], 0);
24
+        }
25
+    }
26
+    suma[nod] += val[nod];
27
+}
28
+
29
+int main() {
30
+    int x, y;
31
+    fin >> n;
32
+    for (int i = 1; i <= n; i++) {
33
+        fin >> val[i];
34
+    }
35
+    for (int i = 1; i <= n - 1; i++) {
36
+        fin >> x >> y;
37
+        vecini[x].push_back(y);
38
+        vecini[y].push_back(x);
39
+    }
40
+    dfs(1);
41
+    for (int i = 1; i <= n; i++) {
42
+        sol = max(sol, suma[i]);
43
+    }
44
+    fout << sol;
45
+    return 0;
46
+}

+ 7
- 0
infoarena/dfs/CMakeLists.txt View File

@@ -0,0 +1,7 @@
1
+CMAKE_MINIMUM_REQUIRED(VERSION 3.2.0)
2
+
3
+get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
4
+string(REPLACE " " "_" ProjectId ${ProjectId})
5
+project(${ProjectId})
6
+
7
+add_executable(${PROJECT_NAME} main.cpp)

+ 47
- 0
infoarena/dfs/main.cpp View File

@@ -0,0 +1,47 @@
1
+#include <fstream>
2
+#include <vector>
3
+
4
+using namespace std;
5
+
6
+ifstream fin("dfs.in");
7
+ofstream fout("dfs.out");
8
+
9
+/* DFS
10
+ *
11
+ * Aceasta este parcurgerea DFS simpla. Problema in sine numără numărul de componente conexe.
12
+ * 
13
+ * Găsiți detalii pe Wikipedia și TopCoder. https://www.topcoder.com/community/competitive-programming/tutorials/introduction-to-graphs-and-their-data-structures-section-2/ 
14
+ */
15
+
16
+int n,                      // numărul de noduri
17
+    m,                      // numărul de muchii
18
+    nrComponente = 0,       // numărul de componente conexe
19
+    vizitat[100001];        // vectorul de vizitare (vizitat[x] = numarul componentei conexe din care face parte)
20
+vector<int> vecini[100001]; // vectorul de vecini. vecini[x] = vecinii nodului x
21
+
22
+void dfs(int nod) {
23
+    vizitat[nod] = nrComponente;
24
+    for(int i = 0; i < vecini[nod].size(); i++) {
25
+        if(vizitat[vecini[nod][i]] == 0) {
26
+            dfs(vecini[nod][i]);
27
+        }
28
+    }
29
+}
30
+
31
+int main() {
32
+    int x, y;
33
+    fin >> n >> m;
34
+    for(int i = 1; i <= m; i++) {
35
+        fin >> x >> y;
36
+        vecini[x].push_back(y);
37
+        vecini[y].push_back(x);
38
+    }
39
+    for(int i = 1; i <= n; i++) {
40
+        if (vizitat[i] == 0 ) {
41
+            nrComponente++;
42
+            dfs(i);
43
+        }
44
+    }
45
+    fout << nrComponente;
46
+    return 0;
47
+}

Loading…
Cancel
Save