190392025-11-18 16:29:30zhuyiPáros részgráfokcpp17Időlimit túllépés 27/1002.598s5336 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class UnionFind {
private:
    vector<int> parent;
    vector<int> parity; // paritás a gyökérhez képest

public:
    UnionFind(int n) : parent(n + 1), parity(n + 1, 0) {
        for (int i = 0; i <= n; i++) {
            parent[i] = i;
        }
    }

    pair<int, int> find(int x) {
        if (parent[x] == x) {
            return {x, 0};
        }
        auto [root, par] = find(parent[x]);
        parent[x] = root;
        parity[x] ^= par;
        return {root, parity[x]};
    }

    // Visszatér true-val, ha sikerült egyesíteni (nem volt páratlan kör)
    // Visszatér false-szal, ha páratlan kör keletkezett
    bool unite(int a, int b) {
        auto [root_a, par_a] = find(a);
        auto [root_b, par_b] = find(b);

        if (root_a == root_b) {
            // Már ugyanabban a komponensben vannak
            // Páratlan kör van, ha a paritásuk azonos
            return par_a != par_b;
        }

        // Egyesítjük a két komponenst
        parent[root_b] = root_a;
        parity[root_b] = par_a ^ par_b ^ 1;
        return true;
    }

    void reset(int n) {
        for (int i = 0; i <= n; i++) {
            parent[i] = i;
            parity[i] = 0;
        }
    }
};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int N, M;
    cin >> N >> M;

    vector<pair<int, int>> edges(M);
    for (int i = 0; i < M; i++) {
        cin >> edges[i].first >> edges[i].second;
    }

    long long result = 0;
    int l = 0;

    for (int r = 0; r < M; r++) {
        // Próbáljuk meg hozzáadni az r-edik élt
        // Újraépítjük a Union-Find-ot az [l, r] intervallumra
        bool has_odd_cycle = false;

        while (l <= r) {
            UnionFind uf(N);
            has_odd_cycle = false;

            // Építsük fel a gráfot az [l, r] élekkel
            for (int i = l; i <= r; i++) {
                if (!uf.unite(edges[i].first, edges[i].second)) {
                    has_odd_cycle = true;
                    break;
                }
            }

            if (!has_odd_cycle) {
                // PG(l, r) páros gráf
                break;
            } else {
                // Páratlan kör van, növeljük l-et
                l++;
            }
        }

        if (l <= r) {
            // [l, r] intervallum páros, így [l, r], [l+1, r], ..., [r, r] mind páros
            result += (r - l + 1);
        }
    }

    cout << result << endl;

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
subtask210/10
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms508 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
11Elfogadva1ms316 KiB
12Elfogadva1ms316 KiB
subtask37/7
13Elfogadva1ms316 KiB
14Elfogadva1ms316 KiB
15Elfogadva1ms316 KiB
16Elfogadva1ms508 KiB
17Elfogadva1ms316 KiB
18Elfogadva1ms316 KiB
19Elfogadva1ms316 KiB
20Elfogadva1ms316 KiB
21Elfogadva1ms316 KiB
22Elfogadva1ms316 KiB
23Elfogadva1ms316 KiB
24Elfogadva1ms316 KiB
25Elfogadva1ms316 KiB
26Elfogadva1ms316 KiB
27Elfogadva1ms316 KiB
28Elfogadva1ms316 KiB
29Elfogadva1ms316 KiB
30Elfogadva1ms316 KiB
31Elfogadva2ms316 KiB
32Elfogadva1ms316 KiB
subtask410/10
33Elfogadva1ms316 KiB
34Elfogadva1ms316 KiB
35Elfogadva1ms316 KiB
36Elfogadva1ms508 KiB
37Elfogadva1ms316 KiB
38Elfogadva1ms316 KiB
39Elfogadva1ms316 KiB
40Elfogadva1ms316 KiB
41Elfogadva1ms316 KiB
42Elfogadva1ms316 KiB
43Elfogadva1ms316 KiB
44Elfogadva1ms316 KiB
45Elfogadva1ms316 KiB
46Elfogadva1ms316 KiB
47Elfogadva1ms316 KiB
48Elfogadva1ms316 KiB
49Elfogadva1ms316 KiB
50Elfogadva1ms316 KiB
51Elfogadva2ms316 KiB
52Elfogadva1ms316 KiB
53Elfogadva4ms316 KiB
54Elfogadva6ms444 KiB
55Elfogadva3ms316 KiB
56Elfogadva4ms500 KiB
57Elfogadva6ms440 KiB
58Elfogadva4ms316 KiB
59Elfogadva6ms324 KiB
60Elfogadva2ms440 KiB
61Elfogadva2ms316 KiB
62Elfogadva3ms316 KiB
subtask50/20
63Elfogadva1ms316 KiB
64Elfogadva1ms316 KiB
65Elfogadva1ms316 KiB
66Elfogadva1ms508 KiB
67Elfogadva1ms316 KiB
68Elfogadva1ms316 KiB
69Elfogadva1ms316 KiB
70Elfogadva1ms316 KiB
71Elfogadva1ms316 KiB
72Elfogadva1ms316 KiB
73Elfogadva1ms316 KiB
74Elfogadva1ms316 KiB
75Elfogadva1ms316 KiB
76Elfogadva1ms316 KiB
77Elfogadva1ms316 KiB
78Elfogadva1ms316 KiB
79Elfogadva1ms316 KiB
80Elfogadva1ms316 KiB
81Elfogadva2ms316 KiB
82Elfogadva1ms316 KiB
83Elfogadva4ms316 KiB
84Elfogadva6ms444 KiB
85Elfogadva3ms316 KiB
86Elfogadva4ms500 KiB
87Elfogadva6ms440 KiB
88Elfogadva4ms316 KiB
89Elfogadva6ms324 KiB
90Elfogadva2ms440 KiB
91Elfogadva2ms316 KiB
92Elfogadva3ms316 KiB
93Időlimit túllépés2.598s668 KiB
94Időlimit túllépés2.575s1040 KiB
95Időlimit túllépés2.552s1140 KiB
96Időlimit túllépés2.572s1036 KiB
97Időlimit túllépés2.536s1100 KiB
98Időlimit túllépés2.553s1140 KiB
99Időlimit túllépés2.553s1036 KiB
100Időlimit túllépés2.555s1252 KiB
101Időlimit túllépés2.582s564 KiB
102Időlimit túllépés2.556s1100 KiB
subtask60/14
103Elfogadva1ms316 KiB
104Elfogadva1ms316 KiB
105Elfogadva1ms316 KiB
106Elfogadva1ms508 KiB
107Elfogadva1ms316 KiB
108Elfogadva1ms316 KiB
109Elfogadva1ms316 KiB
110Elfogadva1ms316 KiB
111Elfogadva1ms316 KiB
112Elfogadva1ms316 KiB
113Elfogadva1ms316 KiB
114Elfogadva1ms316 KiB
115Elfogadva1ms316 KiB
116Elfogadva1ms316 KiB
117Elfogadva1ms316 KiB
118Elfogadva1ms316 KiB
119Elfogadva1ms316 KiB
120Elfogadva1ms316 KiB
121Elfogadva2ms316 KiB
122Elfogadva1ms316 KiB
123Elfogadva4ms316 KiB
124Elfogadva6ms444 KiB
125Elfogadva3ms316 KiB
126Elfogadva4ms500 KiB
127Elfogadva6ms440 KiB
128Elfogadva4ms316 KiB
129Elfogadva6ms324 KiB
130Elfogadva2ms440 KiB
131Elfogadva2ms316 KiB
132Elfogadva3ms316 KiB
133Időlimit túllépés2.598s668 KiB
134Időlimit túllépés2.575s1040 KiB
135Időlimit túllépés2.552s1140 KiB
136Időlimit túllépés2.572s1036 KiB
137Időlimit túllépés2.536s1100 KiB
138Időlimit túllépés2.553s1140 KiB
139Időlimit túllépés2.553s1036 KiB
140Időlimit túllépés2.555s1252 KiB
141Időlimit túllépés2.582s564 KiB
142Időlimit túllépés2.556s1100 KiB
143Időlimit túllépés2.548s1360 KiB
144Időlimit túllépés2.565s1392 KiB
145Időlimit túllépés2.568s1392 KiB
146Időlimit túllépés2.546s1268 KiB
147Időlimit túllépés2.571s1404 KiB
148Időlimit túllépés2.573s1560 KiB
149Időlimit túllépés2.575s1472 KiB
150Időlimit túllépés2.573s1388 KiB
151Időlimit túllépés2.572s1800 KiB
152Időlimit túllépés2.555s1248 KiB
subtask70/20
153Elfogadva1ms316 KiB
154Elfogadva1ms316 KiB
155Elfogadva1ms316 KiB
156Elfogadva1ms508 KiB
157Elfogadva1ms316 KiB
158Elfogadva1ms316 KiB
159Elfogadva1ms316 KiB
160Elfogadva1ms316 KiB
161Elfogadva1ms316 KiB
162Elfogadva1ms316 KiB
163Elfogadva1ms316 KiB
164Elfogadva1ms316 KiB
165Elfogadva1ms316 KiB
166Elfogadva1ms316 KiB
167Elfogadva1ms316 KiB
168Elfogadva1ms316 KiB
169Elfogadva1ms316 KiB
170Elfogadva1ms316 KiB
171Elfogadva2ms316 KiB
172Elfogadva1ms316 KiB
173Elfogadva4ms316 KiB
174Elfogadva6ms444 KiB
175Elfogadva3ms316 KiB
176Elfogadva4ms500 KiB
177Elfogadva6ms440 KiB
178Elfogadva4ms316 KiB
179Elfogadva6ms324 KiB
180Elfogadva2ms440 KiB
181Elfogadva2ms316 KiB
182Elfogadva3ms316 KiB
183Időlimit túllépés2.598s668 KiB
184Időlimit túllépés2.575s1040 KiB
185Időlimit túllépés2.552s1140 KiB
186Időlimit túllépés2.572s1036 KiB
187Időlimit túllépés2.536s1100 KiB
188Időlimit túllépés2.553s1140 KiB
189Időlimit túllépés2.553s1036 KiB
190Időlimit túllépés2.555s1252 KiB
191Időlimit túllépés2.582s564 KiB
192Időlimit túllépés2.556s1100 KiB
193Időlimit túllépés2.548s1360 KiB
194Időlimit túllépés2.565s1392 KiB
195Időlimit túllépés2.568s1392 KiB
196Időlimit túllépés2.546s1268 KiB
197Időlimit túllépés2.571s1404 KiB
198Időlimit túllépés2.573s1560 KiB
199Időlimit túllépés2.575s1472 KiB
200Időlimit túllépés2.573s1388 KiB
201Időlimit túllépés2.572s1800 KiB
202Időlimit túllépés2.555s1248 KiB
203Időlimit túllépés2.562s1636 KiB
204Időlimit túllépés2.575s2268 KiB
205Időlimit túllépés2.575s2208 KiB
206Időlimit túllépés2.563s1904 KiB
207Időlimit túllépés2.572s2016 KiB
208Időlimit túllépés2.575s2004 KiB
209Időlimit túllépés2.575s2008 KiB
210Időlimit túllépés2.575s2100 KiB
211Időlimit túllépés2.573s2192 KiB
212Időlimit túllépés2.566s1844 KiB
subtask80/19
213Elfogadva1ms500 KiB
214Elfogadva1ms316 KiB
215Elfogadva1ms316 KiB
216Elfogadva1ms316 KiB
217Elfogadva1ms316 KiB
218Elfogadva1ms508 KiB
219Elfogadva1ms316 KiB
220Elfogadva1ms316 KiB
221Elfogadva1ms316 KiB
222Elfogadva1ms316 KiB
223Elfogadva1ms316 KiB
224Elfogadva1ms316 KiB
225Elfogadva1ms316 KiB
226Elfogadva1ms316 KiB
227Elfogadva1ms316 KiB
228Elfogadva1ms316 KiB
229Elfogadva1ms316 KiB
230Elfogadva1ms316 KiB
231Elfogadva1ms316 KiB
232Elfogadva1ms316 KiB
233Elfogadva2ms316 KiB
234Elfogadva1ms316 KiB
235Elfogadva4ms316 KiB
236Elfogadva6ms444 KiB
237Elfogadva3ms316 KiB
238Elfogadva4ms500 KiB
239Elfogadva6ms440 KiB
240Elfogadva4ms316 KiB
241Elfogadva6ms324 KiB
242Elfogadva2ms440 KiB
243Elfogadva2ms316 KiB
244Elfogadva3ms316 KiB
245Időlimit túllépés2.598s668 KiB
246Időlimit túllépés2.575s1040 KiB
247Időlimit túllépés2.552s1140 KiB
248Időlimit túllépés2.572s1036 KiB
249Időlimit túllépés2.536s1100 KiB
250Időlimit túllépés2.553s1140 KiB
251Időlimit túllépés2.553s1036 KiB
252Időlimit túllépés2.555s1252 KiB
253Időlimit túllépés2.582s564 KiB
254Időlimit túllépés2.556s1100 KiB
255Időlimit túllépés2.548s1360 KiB
256Időlimit túllépés2.565s1392 KiB
257Időlimit túllépés2.568s1392 KiB
258Időlimit túllépés2.546s1268 KiB
259Időlimit túllépés2.571s1404 KiB
260Időlimit túllépés2.573s1560 KiB
261Időlimit túllépés2.575s1472 KiB
262Időlimit túllépés2.573s1388 KiB
263Időlimit túllépés2.572s1800 KiB
264Időlimit túllépés2.555s1248 KiB
265Időlimit túllépés2.562s1636 KiB
266Időlimit túllépés2.575s2268 KiB
267Időlimit túllépés2.575s2208 KiB
268Időlimit túllépés2.563s1904 KiB
269Időlimit túllépés2.572s2016 KiB
270Időlimit túllépés2.575s2004 KiB
271Időlimit túllépés2.575s2008 KiB
272Időlimit túllépés2.575s2100 KiB
273Időlimit túllépés2.573s2192 KiB
274Időlimit túllépés2.566s1844 KiB
275Időlimit túllépés2.573s5128 KiB
276Időlimit túllépés2.575s5136 KiB
277Időlimit túllépés2.598s5136 KiB
278Időlimit túllépés2.598s5136 KiB
279Időlimit túllépés2.578s5140 KiB
280Időlimit túllépés2.578s5304 KiB
281Időlimit túllépés2.598s5132 KiB
282Időlimit túllépés2.598s5336 KiB
283Időlimit túllépés2.588s5140 KiB
284Időlimit túllépés2.588s5232 KiB