# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
764669 | pere_gil | Logičari (COCI21_logicari) | C++14 | 90 ms | 28056 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) a*b/gcd(a,b)
#define ii pair<int,int>
#define vi vector<int>
#define all(x) x.begin(),x.end()
const int MAX_N=2e5+5;
vi adj[MAX_N];
set<int> dis[MAX_N];
int main(){
int n; scanf("%d",&n);
for(int i=0;i<n;i++){
int u,v; scanf("%d %d",&u,&v);
u--,v--;
dis[u].insert(v);
dis[v].insert(u);
adj[u].push_back(v);
adj[v].push_back(u);
}
bool sw=true;
for(int i=0;i<n;i++)
sw&=adj[i].size()==2;
if(sw){
printf("%d\n",n%4 ? -1 : n/2);
return 0;
}
bool good[n]={},in[n]={},taken[n]={};
while(true){
int act=-1;
for(int i=0;i<n;i++)
if(!good[i]){
if(!dis[i].size()){
printf("-1\n");
return 0;
}
else if(dis[i].size()==1) act=i;
}
if(act==-1) break;
act=*dis[act].begin();
taken[act]=in[act]=true;
for(int u: adj[act]) good[u]=true;
set<int> aux;
for(int u: adj[act])
for(int v: adj[u]){
if(taken[v]) continue;
taken[v]=true;
aux.insert(v);
}
for(int i=0;i<n;i++)
for(int x: aux)
dis[i].erase(x);
}
int res=0;
for(int i=0;i<n;i++) res+=in[i];
printf("%d\n",res);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |