Skip to main content
13 of 22
deleted 13 characters in body
ceilingcat
  • 7.7k
  • 2
  • 30
  • 30

C (gcc), 790 778 757 748 731 bytes

typedef struct F F;typedef struct{int c,p;F**m;}g;struct F{int d;g f;};g S,y,q,*x=&y,*p=&q;A(g*g,F*s){g->c++[g->m=g->c-g->p?g->m:realloc(g->m,(g->p+=32)*20)]=s;}i,*a,c[999],b,j,k,l;*B(d){F*s=0;for(i=S.c;i--;)s=S.m[i]->d-d?s:S.m[i];!s?s=calloc(5,4),s->d=d,A(&S,s):0;return s;}F*u,*v;E(g**c,g**p){g*z=*c,*y=*p;for(i=-1;b=++i<S.c;b&&A(z,S.m[i]))for(l=0;k=l<z->c&b;b&=!k)for(j=0,u=z->m[l++];j<u->f.c&&(k=u->f.m[j++]->d-S.m[i]->d););i=z->c>y->c?a=z,*c=y,*p=a,y->c=0:(z->c=0);}main(){for(;~scanf("%d %d",&a,&b)&&A(&(u=B(a))->f,v=B(b))|~A(&v->f,u););for(E(&x,&p);b=i<S.c;)c[i]<i?a=S.m[b=i%2*c[i]++],S.m[b]=S.m[i],S.m[i]=a,E(&x,&p):(c[i++]=0);for(printf("largest clique size: %d\nclique members:",p->c);b<p->c;)printf(" %d",p->m[b++]->d);}

This is a slightly golfed version of the reference implementation. Try it online!

Slightly golfed less

typedef struct F F;
// student group
typedef struct{
  int c, // count
      p; // capacity
  F**m;  // members
}g;
// student
struct F{
  int d; // id
  g f;   // friends
};
g S,y,q,*x=&y,*p=&q;
A(g*g,F*s){
  g->c++[g->m=g->c-g->p?g->m:realloc(g->m,(g->p+=32)*20)]=s;
}
i,*a,c[999],b,j,k,l;
*B(d){
  F*s=0;
  for(i=S.c;i--;)
    s=S.m[i]->d-d?
      s
    :
      S.m[i];
  !s?
    s=calloc(5,4),
    s->d=d,A(&S,s)
  :
    0;
  return s;
}
F*u,*v;
E(g**c,g**p){
  g*z=*c,*y=*p;
  for(i=-1;b=++i<S.c;b&&A(z,S.m[i]))
    for(l=0;k=l<z->c&b;b&=!k)
      for(j=0,u=z->m[l++];j<u->f.c&&(k=u->f.m[j++]->d-S.m[i]->d););
  i=z->c>y->c?
    a=z,
    *c=y,
    *p=a,
    y->c=0
  :
    (z->c=0);
}
main(){
  for(;~scanf("%d %d",&a,&b)&&A(&(u=B(a))->f,v=B(b))|~A(&v->f,u);)
  for(E(&x,&p);b=i<S.c;)
    c[i]<i?
      a=S.m[b=i%2*c[i]++],
      S.m[b]=S.m[i],
      S.m[i]=a,
      E(&x,&p),
    :
      (c[i++]=0);
  for(printf("largest clique size: %d\nclique members:",p->c);b<p->c;)
    printf(" %d",p->m[b++]->d);
}
ceilingcat
  • 7.7k
  • 2
  • 30
  • 30