Submission #334577

#TimeUsernameProblemLanguageResultExecution timeMemory
334577VodkaInTheJarUntitled (POI11_smi)C++14
100 / 100
985 ms75164 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") #define endl '\n' using namespace std; const int maxn = 1e6 + 3; int n, m; vector <pair <int, int> > adj[maxn]; void read() { cin >> n >> m; for (int i = 1; i <= m; i++) { int a, b, s, t; cin >> a >> b >> s >> t; if (s == t) continue; adj[a].push_back({b, i}); adj[b].push_back({a, i}); } } int pos[maxn]; bool used[maxn]; void solve() { for (int i = 1; i <= n; i++) if ((int)adj[i].size() % 2 == 1) { cout << "NIE" << endl; return; } vector <vector <int> > ans; for (int i = 1; i <= n; i++) { if (pos[i] == (int)adj[i].size()) continue; vector <int> order; stack <int> st; st.push(i); while (!st.empty()) { int ver = st.top(); while (pos[ver] < (int)adj[ver].size() && used[adj[ver][pos[ver]].second]) pos[ver]++; if (pos[ver] == (int)adj[ver].size()) { order.push_back(ver); st.pop(); continue; } used[adj[ver][pos[ver]].second] = true; st.push(adj[ver][pos[ver]].first); } for (auto i: order) used[i] = false; for (auto i: order) { if (st.empty() || !used[i]) { st.push(i); used[i] = true; continue; } else { vector <int> cycle; while (st.top() != i) { cycle.push_back(st.top()); used[st.top()] = false; st.pop(); } cycle.push_back(i); ans.push_back(cycle); } } } cout << (int)ans.size() << endl; for (auto i: ans) { cout << (int)i.size() << " "; for (auto j: i) cout << j << " "; cout << i[0] << endl; } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); read(); solve(); }
#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...