Skip to content

Commit 1747222

Browse files
Dodano rozwiązanie zadania 'Osiedla' z XXVI OI
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
1 parent a37b95e commit 1747222

File tree

3 files changed

+79
-8
lines changed

3 files changed

+79
-8
lines changed

README.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ Po wbiciu jakiegoś zadania, np ['Rycerz' z pierwszego dnia II etapu XXXI OI](ht
6262

6363
Etap I | Etap II | Etap III | Łącznie
6464
:---: | :---: | :---: | :---:
65-
38/150 (25%) | 44/157 (28%) | 39/200 (20%) | 121/507 (24%)
65+
39/150 (26%) | 45/157 (29%) | 39/200 (20%) | 123/507 (24%)
6666

6767
## Rozwiązane zadania wg edycji
6868

@@ -73,11 +73,11 @@ II | 4/14 (29%) | XII | 4/17 (24%) | XXII | 4/17 (24%) | XXXII | 7/18 (39%)
7373
III | 2/13 (15%) | XIII | 5/16 (31%) | XXIII | 3/17 (18%) | |
7474
IV | 3/16 (19%) | XIV | 3/16 (19%) | XXIV | 6/16 (38%) | |
7575
V | 2/16 (12%) | XV | 3/16 (19%) | XXV | 16/18 (89%) | |
76-
VI | 2/15 (13%) | XVI | 1/16 (6%) | XXVI | 8/17 (47%) | |
76+
VI | 2/15 (13%) | XVI | 1/16 (6%) | XXVI | 9/17 (53%) | |
7777
VII | 3/15 (20%) | XVII | 5/17 (29%) | XXVII | 1/10 (10%) | |
7878
VIII | 2/15 (13%) | XVIII | 5/17 (29%) | XXVIII | 3/17 (18%) | |
7979
IX | 6/15 (40%) | XIX | 4/17 (24%) | XXIX | 1/17 (6%) | |
80-
X | 1/16 (6%) | XX | 3/17 (18%) | XXX | 0/17 (0%) | |
80+
X | 1/16 (6%) | XX | 3/17 (18%) | XXX | 1/17 (6%) | |
8181

8282

8383
## Rozwiązane zadania z I etapu
@@ -113,7 +113,7 @@ XXVI | pod ✅ | nie ✅ | rob ✅ | klu ✅ | par ✅ | —
113113
XXVII | | | | | | —
114114
XXVIII | gan ✅ | | | | | —
115115
XXIX | | | | | | —
116-
XXX | | | | | | —
116+
XXX | kol ✅ | | | | | —
117117
XXXI | cza ✅ | | | | | —
118118
XXXII | wal ✅ | kas 🤔 | spr ✅ | usu ✅ | zam ✅ | bit ✅
119119

@@ -147,7 +147,7 @@ XXII | | pus ✅ | | |
147147
XXIII | | zaj ✅ | dro ✅ | |
148148
XXIV | | sum ✅ | | kon ✅ | zam ✅
149149
XXV | | kon ✅ | dro ✅ | tom ✅ | tel ✅
150-
XXVI | | kol ✅ | gwi ✅ | osi 🤔 | roz 🤔
150+
XXVI | | kol ✅ | gwi ✅ | osi | roz 🤔
151151
XXVII | | czw ✅ | | |
152152
XXVIII | | ple ✅ | | pla ✅ |
153153
XXIX | | | | kon ✅ |
@@ -190,5 +190,4 @@ XXVII | — | — | — | — | — | — | — | —
190190
XXVIII | | — | | | | | |
191191
XXIX | | | | | | | |
192192
XXX | | — | | | | | |
193-
XXXI | | — | | | | | |
194-
XXXII | | — | | | | | |
193+
XXXI | | — | | | | | |

checklista/tasks.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -704,7 +704,7 @@
704704
"etap": 2,
705705
"dzien": 2,
706706
"nazwa": "osi",
707-
"punkty": 37
707+
"punkty": 100
708708
},
709709
"xxvi_etap2_dzien2_roz": {
710710
"edycja": 26,
@@ -797,6 +797,13 @@
797797
"nazwa": "kon",
798798
"punkty": 100
799799
},
800+
"xxx_etap1_kol": {
801+
"edycja": 30,
802+
"etap": 1,
803+
"dzien": 0,
804+
"nazwa": "kol",
805+
"punkty": 100
806+
},
800807
"xxxi_etap2_dzien1_lic": {
801808
"edycja": 31,
802809
"etap": 2,
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Rozwiązanie zadania 'Osiedla' z II etapu XXV OI.
2+
// Autor rozwiązania: Paweł Putra
3+
// Złożoność czasowa: O(n)
4+
// Złożoność pamięciowa: O(n)
5+
// Punkty: 100 (upsolve)
6+
7+
#include <bits/stdc++.h>
8+
9+
#include <vector>
10+
#include <iostream>
11+
#include <algorithm>
12+
#include <string>
13+
using namespace std;
14+
constexpr int MAXN = 1'000'005;
15+
16+
int spojne;
17+
string kierunki;
18+
vector<pair<int,int>> g[MAXN];
19+
20+
int vis[MAXN];
21+
int d[MAXN]; // d[v] = odległość v od korzenia (głębokość).
22+
int low[MAXN]; // low[v] = najniższa głębokość na jaką idzie krawędź powrotna z poddrzewa.
23+
24+
void dfs(int v, int p /* numer krawędzi którą przyszedłem */) {
25+
low[v] = d[v];
26+
vis[v] = 1;
27+
for (auto [w, i] : g[v]) {
28+
if (!vis[w]) {
29+
d[w] = d[v] + 1;
30+
kierunki[abs(i) - 1] = (i < 0 ? '>' : '<');
31+
dfs(w, abs(i));
32+
33+
low[v] = min(low[w], low[v]);
34+
}
35+
else if (abs(i) != p) {
36+
kierunki[abs(i) - 1] = (i < 0 ? '<' : '>');
37+
low[v] = min(low[v], d[w]);
38+
}
39+
}
40+
}
41+
42+
43+
int32_t main() {
44+
ios_base::sync_with_stdio(0);
45+
int n, m;
46+
cin >> n >> m;
47+
48+
kierunki = string(m, '<');
49+
for (int i = 1; i <= m; i++) {
50+
int a, b;
51+
cin >> a >> b;
52+
g[a].emplace_back(b, i);
53+
g[b].emplace_back(a, -i);
54+
}
55+
56+
for (int i = 1; i <= n; i++) {
57+
if (!vis[i])
58+
dfs(i, 0);
59+
60+
if (low[i] == d[i]) spojne++;
61+
}
62+
63+
cout << spojne << "\n";
64+
cout << kierunki << "\n";
65+
}

0 commit comments

Comments
 (0)