// trz-trzy-drogi.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu. // #include <iostream> #include <set> #include <utility> constexpr int MAXN = 200007; constexpr int MAXM = 500007; bool visited[MAXN]; std::pair<int, int> edges2[MAXM]; std::multiset<int> edges[MAXN]; int hm; void dfs(int v) { visited[v] = 1; hm++; for (auto v2 : edges[v]) { if (!visited[v2]) { dfs(v2); } } } inline void rm(std::pair<int, int> v) { int a = v.first, b = v.second; edges[a].erase(edges[a].find(b)); edges[b].erase(edges[b].find(a)); } inline void add(std::pair<int, int> v) { int a = v.first, b = v.second; edges[a].insert(b); edges[b].insert(a); } int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0); int n, m, a, b; bool isok; long long answ = 0; std::cin >> n >> m; for (size_t i = 1; i <= m; i++) { std::cin >> a >> b; edges[a].insert(b); edges[b].insert(a); edges2[i] = std::make_pair(a, b); } for (size_t i = 1; i <= m; i++) { rm(edges2[i]); for (size_t j = i+1; j <= m; j++) { rm(edges2[j]); for (size_t k = j+1; k <= m; k++) { rm(edges2[k]); for (size_t l = 1; l <= n; l++) { visited[l] = 0; } hm = 0; dfs(1); answ += hm!=n; add(edges2[k]); } add(edges2[j]); } add(edges2[i]); } std::cout << answ << '\n'; } // Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania // Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie // Porady dotyczące rozpoczynania pracy: // 1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi // 2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła // 3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty // 4. Użyj okna Lista błędów, aby zobaczyć błędy // 5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu // 6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | // trz-trzy-drogi.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu. // #include <iostream> #include <set> #include <utility> constexpr int MAXN = 200007; constexpr int MAXM = 500007; bool visited[MAXN]; std::pair<int, int> edges2[MAXM]; std::multiset<int> edges[MAXN]; int hm; void dfs(int v) { visited[v] = 1; hm++; for (auto v2 : edges[v]) { if (!visited[v2]) { dfs(v2); } } } inline void rm(std::pair<int, int> v) { int a = v.first, b = v.second; edges[a].erase(edges[a].find(b)); edges[b].erase(edges[b].find(a)); } inline void add(std::pair<int, int> v) { int a = v.first, b = v.second; edges[a].insert(b); edges[b].insert(a); } int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0); int n, m, a, b; bool isok; long long answ = 0; std::cin >> n >> m; for (size_t i = 1; i <= m; i++) { std::cin >> a >> b; edges[a].insert(b); edges[b].insert(a); edges2[i] = std::make_pair(a, b); } for (size_t i = 1; i <= m; i++) { rm(edges2[i]); for (size_t j = i+1; j <= m; j++) { rm(edges2[j]); for (size_t k = j+1; k <= m; k++) { rm(edges2[k]); for (size_t l = 1; l <= n; l++) { visited[l] = 0; } hm = 0; dfs(1); answ += hm!=n; add(edges2[k]); } add(edges2[j]); } add(edges2[i]); } std::cout << answ << '\n'; } // Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania // Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie // Porady dotyczące rozpoczynania pracy: // 1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi // 2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła // 3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty // 4. Użyj okna Lista błędów, aby zobaczyć błędy // 5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu // 6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln |