Pagini recente » Cod sursa (job #792124) | Cod sursa (job #1532541) | Cod sursa (job #1766463) | Cod sursa (job #840438) | Cod sursa (job #183066)
Cod sursa(job #183066)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int NMAX=8200;
int n,m,f,st[NMAX],dr[2*NMAX],sin[NMAX],sout[NMAX];
char viz[NMAX],s[NMAX];
vector<int> a[NMAX];
void citeste(){
int i,j,k;
scanf("%d %d",&n,&m);
for (k=1;k<=n;++k) {scanf("%d %d",&i,&j);
a[i].push_back(n+j);}
}
void cup(int vf){
vector<int>::iterator it;
if (!viz[vf]){
viz[vf]=1;
for (it=a[vf].begin();it!=a[vf].end();it++)
if (st[*it]==-1){
st[*it]=vf;
dr[vf]=*it;
return;}
for (it=a[vf].begin();it!=a[vf].end();it++){
cup(st[*it]);
if (dr[st[*it]]!=*it){
st[*it]=vf;
dr[vf]=*it;
return;}
}
}
}
void cuplaj(){
int i;
f=0;
memset(dr,-1,sizeof(dr));
for (i=1;i<=n;++i)
if (dr[i]==-1){
memset(viz,0,sizeof(viz));
cup(i);
if (dr[i]!=-1) f++;}
else f++;
}
void scrie(){
printf("%d\n",2*n-f);
}
int main(){
freopen("felinare.in","r",stdin);
freopen("felinare.out","w",stdout);
citeste();
cuplaj();
scrie();
return 0;
}