#include using namespace std; using ll = long long; using ld = long double; #ifdef DEB #define D if(1) #else #define D if(0) #endif const int NMAX = 312345; struct Vr { Vr * root; vector n; vector maly; bool is; void komp(Vr * r) { if(root) return; if(!is) return; root = r; for(Vr * it : n) it->komp(root); } void malykomp(Vr * r) { if(root) return; root = r; for(Vr * it : maly) it->malykomp(root); } }; Vr vr [NMAX]; pair hrany[NMAX]; int n,m,q; Vr * ask[NMAX]; int main() { scanf("%d%d%d",&n,&m,&q); for(int i=0;i100000) //if(0) { D printf("VELKY"); for(int i=0;iis=1; } for(int i=0;imaly.clear(); ask[i]->root=0; } for(int i=0;i p =make_pair(ask[i],ask[j]); pair f = *lower_bound(hrany,hrany+2*m,p); if(f==p) { ask[i]->maly.push_back(ask[j]); ask[j]->maly.push_back(ask[i]); } } for(int i=0;iroot==0) { out++; ask[i]->malykomp(ask[i]); } } } printf("%d\n",out); } return 0; }