제출 #94665

#제출 시각아이디문제언어결과실행 시간메모리
94665Alexa2001Praktični (COCI18_prakticni)C++17
130 / 130
209 ms16468 KiB
#include <bits/stdc++.h> using namespace std; const int Nmax = 1e5 + 5; int xr[Nmax], Cost[Nmax], up[Nmax]; vector<int> v[Nmax]; vector< pair<int,int> > E; int used[Nmax]; void dfs(int node, int dad = 0) { used[node] = 1; for(auto it : v[node]) { int son, cost; son = node ^ xr[it], cost = Cost[it]; if(son != dad) { if(!used[son]) { up[son] = up[node] ^ cost; dfs(son, node); } else if(used[son] == 1) { cost ^= up[node] ^ up[son]; if(cost) E.push_back({cost, it}); } } } used[node] = 2; } int main() { // freopen("input", "r", stdin); int n, m, x, y, z, i; cin >> n >> m; for(i=1; i<=m; ++i) { cin >> x >> y >> z; xr[i] = x^y, Cost[i] = z; v[x].push_back(i); v[y].push_back(i); } dfs(1); vector< vector<int> > answer; for(i=0; i<30; ++i) { int val = 0; for(auto it : E) if(it.first & (1<<i)) val = it.first; if(!val) continue; answer.push_back(vector<int> () ); answer.back().push_back(val); vector<int> ids; for(auto &it : E) if(it.first & (1<<i)) ids.push_back(it.second), it.first ^= val; answer.back().push_back(ids.size()); for(auto it : ids) answer.back().push_back(it); } cout << answer.size() << '\n'; for(auto it : answer) { for(auto x : it) cout << x << ' '; cout << '\n'; } return 0; }
#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...