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 {
#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{};
| ^~~~~