Submission #3680

#TimeUsernameProblemLanguageResultExecution timeMemory
3680pl0892029Cactus? Not cactus? (kriii1_C)C++98
0 / 1
0 ms1868 KiB
#include <cstdio>

int groupNumber[100001];
int groupCount[100001];

bool isSameSet(int a,int b) {
 return groupNumber[a] == groupNumber[b];
}

void setUnion(int a,int b) {
 if( groupCount[a] < groupCount[b] ) {
  groupCount[b] += groupCount[a];
  groupCount[a] = 0;
  groupNumber[a] = b;
 }
 else {
  groupCount[a] += groupCount[a];
  groupCount[b] = 0;
  groupNumber[b] = a;
 }
}

int setFind(int n) {
 if( groupCount[n] == 0 ) {
  groupNumber[n] = setFind(groupNumber[n]);
 }
 return groupNumber[n];
}

int main() {
 int n, m;
 scanf("%d %d",&n,&m);

 for(int i=1;i<=n;i++) {
  groupCount[i] = 1;
  groupNumber[i] = i;
 }

 int count = 0;

 for(int i=0;i<m;i++) {
  int a, b;
  scanf("%d %d",&a,&b);
  int u = setFind(a);
  int v = setFind(b);

  if( isSameSet(u,v) ) {
   printf("add count\n");
   count++;
  }
  else
   setUnion(u,v);
 }
 if( count > 1 )
  printf("Not cactus");
 else
  printf("Cactus");
}

#Verdict Execution timeMemoryGrader output
Fetching results...