Submission #66738437


Source Code Expand

Copy
#include <string>
#include <vector>
#include <iostream>
#include <utility>
#include <math.h>
#include <queue>
#include <algorithm>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <map>
#include <deque>
#include <stack>
#include <climits>
#include <numeric>
using namespace std;
using ll = long long;
struct Edge {
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <string>
#include <vector>
#include <iostream>
#include <utility>
#include <math.h>
#include <queue>
#include <algorithm>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <map>
#include <deque>
#include <stack>
#include <climits>
#include <numeric>

using namespace std;
using ll = long long;

struct Edge {
    int to; 
    ll w;
};

int main() {
    int n, m;
    if (!(cin >> n >> m)) return 0;

    vector<vector<Edge>> g(n + 1);
    for (int i = 0; i < m; ++i) {
        int a, b; ll w;
        cin >> a >> b >> w;
        g[a].push_back({b, w});
    }

    const ll INF = -1;
    vector<ll> dist(n + 1, INF);
    array<ll, 61> basis{};

    stack<int> st;
    dist[1] = 0;
    st.push(1);

    while (!st.empty()) {
        int v = st.top(); st.pop();
        for (auto [to, w] : g[v]) {
            if (dist[to] == INF) {
                dist[to] = dist[v] ^ w;
                st.push(to);
            } else {
                ll cyc = dist[v] ^ dist[to] ^ w;
                for (int b = 60; b >= 0 && cyc; --b) {
                    if (!(cyc & (1LL << b))) continue;
                    if (!basis[b]) { basis[b] = cyc; break; }
                    cyc ^= basis[b];
                }
            }
        }
    }

    if (dist[n] == INF) {
        cout << -1 << '\n';
        return 0;
    }

    ll ans = dist[n];
    for (int b = 60; b >= 0; --b) {
        if (basis[b] && (ans > (ans ^ basis[b])))
            ans ^= basis[b];
    }
    cout << ans << '\n';
    return 0;
}

Submission Info

Submission Time
Task D - XOR Shortest Walk
User saitaman
Language C++ 20 (gcc 12.2)
Score 0
Code Size 1614 Byte
Status CE

Compile Error

Main.cpp: In function ‘int main()’:
Main.cpp:39:19: error: variable ‘std::array<long long int, 61> basis’ has initializer but incomplete type
   39 |     array<ll, 61> basis{};
      |                   ^~~~~


2025-06-16 (Mon)
01:19:43 +09:00