제출 #1124682

#제출 시각아이디문제언어결과실행 시간메모리
1124682HasanV11010238Naboj (COCI22_naboj)C++20
110 / 110
931 ms73520 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define MAX 1000000 #define mod 998244353 set<int> s; vector<set<int>> v, vr; void check(int x){ if ((v[x].size() + vr[x].size()) == 0) return; if (v[x].size() == 0) s.insert(x); if (vr[x].size() == 0) s.insert(x); } int main(){ int n, m, a, b; cin>>n>>m; v.assign(n + 1, set<int>()), vr.assign(n + 1, set<int>()); for (int i = 0; i < m; i++){ cin>>a>>b; v[b].insert(a); vr[a].insert(b); } for (int i = 1; i <= n; i++){ check(i); } vector<vector<int>> ord; while (!s.empty()){ int x = *s.begin(); s.erase(s.begin()); if ((v[x].size() + vr[x].size()) == 0) continue; if (v[x].size() == 0){ ord.push_back({x, 1}); for (auto el : vr[x]){ v[el].erase(x); check(el); } vr[x].clear(); } else{ ord.push_back({x, 0}); for (auto el : v[x]){ vr[el].erase(x); check(el); } v[x].clear(); } } bool can = 1; for (int i = 1; i <= n; i++){ if (v[i].size() != 0 || vr[i].size() != 0){ can = 0; } } if (can){ reverse(ord.begin(), ord.end()); cout<<ord.size()<<"\n"; for (auto el : ord){ cout<<el[0]<<" "<<el[1]<<"\n"; } } else{ cout<<-1; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...