제출 #525935

#제출 시각아이디문제언어결과실행 시간메모리
525935SlavitaLogičari (COCI21_logicari)C++14
10 / 110
319 ms6876 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> #define ve vector<int> #define pb push_back #define mp make_pair #define fi first #define se second #define pi pair<int,int> #define all(v) v.begin(),v.end() #define si(v) (int)v.size() #define en '\n' #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> #define ordered_muiltiset tree<int, null_type,less_equal<>, rb_tree_tag,tree_order_statistics_node_update> using namespace std; //using namespace __gnu_pbds; typedef long long ll; typedef unsigned long long ull; const int N = 1e5 + 228; const int big = 1e9; const ll llbig = 1e18 + 228; //ordered_set os; // os.order_of_key(4), (*os.find_by_order(5)) int n, m; int mrk[N]; vector<int> g[N]; bool getbit(int x, int bit){ assert(bit > 0); bit--; return (x & (1 << bit)) == (1 << bit); } int main(){ cin >> n; for (int i = 1; i <= n; i++){ int a, b; cin >> a >> b; g[a].pb(b); g[b].pb(a); } if (n <= 21){ int ans = big; for (int mask = 1; mask <= (1 << (n + 1)); mask++){ bool ok = 1; int an = 0; for (int i = 1; i <= n; i++) mrk[i] = 0; for (int i = 1; i <= n; i++){ if (!getbit(mask, i)) continue; an++; mrk[i] = 2; for (auto u : g[i]){ if (getbit(mask, u)) continue; if (mrk[u]) {ok = 0; break;} mrk[u] = 1; } } for (int i = 1; i <= n; i++) { int kol = 0; for (auto u : g[i]){ if (getbit(mask, u)) kol++; } if (kol != 1) {ok = 0; break;} } if (ok){ ans = min(ans, an); } } if (ans == big) cout << -1; else cout << ans; }else{ if (n == 1){ cout << 0; }else if (n == 2){ cout << 1; } else cout << n - 2; } 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...