Submission #463460

#TimeUsernameProblemLanguageResultExecution timeMemory
463460grtPraktični (COCI18_prakticni)C++17
130 / 130
138 ms18016 KiB
#include <bits/stdc++.h> #define PB push_back #define ST first #define ND second #define _ ios_base::sync_with_stdio(0); cin.tie(0); //mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); using namespace std; using ll = long long; using pi = pair<int,int>; using vi = vector<int>; const int nax = 100 * 1000 + 10, mod = 1e9 + 7, p = 31; int n, m; vector<pi>V[nax]; int cost[nax]; bool vis[nax]; int xr[nax]; vector<pi>num; bool done[nax]; void dfs(int x, int par) { vis[x] = true; for(auto nbh : V[x]) if(nbh.ST != par) { if(!vis[nbh.ST]) { xr[nbh.ST] = xr[x] ^ cost[nbh.ND]; dfs(nbh.ST, x); } else { if(done[nbh.ND]) continue; done[nbh.ND] = true; num.emplace_back(xr[x] ^ xr[nbh.ST] ^ cost[nbh.ND], nbh.ND); } } } int main() {_ cin >> n >> m; for(int a, b, c, i = 1; i <= m; ++i) { cin >> a >> b >> c; V[a].emplace_back(b, i); V[b].emplace_back(a, i); cost[i] = c; } dfs(1, 0); int id = 0; vi res = {}; vector<vi>ans = {}; for(int bit = 30; bit >= 0; --bit) { bool any = false; for(int i = id; i < (int)num.size(); ++i) { if((1 << bit) & num[i].ST) { swap(num[i], num[id]); any = true; break; } } if(any) { res.PB(num[id].ST); vi tmp = {num[id].ND}; for(int i = id + 1; i < (int)num.size(); ++i) { if(num[i].ST & (1 << bit)) { num[i].ST ^= num[id].ST; tmp.PB(num[i].ND); } } ans.PB(tmp); id++; } } cout << id << "\n"; for(int i = 0; i < id; ++i) { cout << res[i] << " " << (int)ans[i].size() << " "; for(auto x : ans[i]) cout << x << " "; cout << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...