QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#193730 | #7514. Clique Challenge | ucup-team896# | RE | 483ms | 200424kb | C++23 | 8.6kb | 2023-09-30 17:47:18 | 2023-09-30 17:47:19 |
Judging History
answer
/*
* @Author: cmk666
* @Created time: 2023-09-30 16:21:23
* @Last Modified time: 2023-09-30 17:47:09
*/
#pragma GCC optimize("Ofast", "unroll-loops")
#include<bits/stdc++.h>
#ifdef LOCAL
#include"debug.h"
#else
#define D(...) ((void)0)
#endif
using namespace std; using ll = long long;
#define For(i, j, k) for ( int i = (j) ; i <= (k) ; i++ )
#define Fol(i, j, k) for ( int i = (j) ; i >= (k) ; i-- )
namespace FastIO
{
// ------------------------------
// #define IN_HAS_NEG
// #define OUT_HAS_NEG
// #define CHK_EOF
// #define DISABLE_MMAP
// ------------------------------
#if __cplusplus < 201400
#error Please use C++14 or higher.
#endif
#if __cplusplus > 201700
#define INLINE_V inline
#else
#define INLINE_V
#endif
#if ( defined(LOCAL) || defined(_WIN32) ) && !defined(DISABLE_MMAP)
#define DISABLE_MMAP
#endif
#ifndef DISABLE_MMAP
#include<sys/mman.h>
#endif
#ifdef LOCAL
inline char gc() { return getchar(); }
inline void pc(char c) { putchar(c); }
#else
#ifdef DISABLE_MMAP
INLINE_V constexpr int _READ_SIZE = 1 << 18;
INLINE_V static char _read_buffer[_READ_SIZE], *_read_ptr = nullptr, *_read_ptr_end = nullptr;
inline char gc()
{
if ( __builtin_expect(_read_ptr == _read_ptr_end, false) )
{
_read_ptr = _read_buffer;
_read_ptr_end = _read_buffer + fread(_read_buffer, 1, _READ_SIZE, stdin);
#ifdef CHK_EOF
if ( __builtin_expect(_read_ptr == _read_ptr_end, false) ) return EOF;
#endif
}
return *_read_ptr++;
}
#else
INLINE_V static const char *_read_ptr = (const char *)mmap(nullptr, INT_MAX, 1, 2, 0, 0);
inline char gc() { return *_read_ptr++; }
#endif
INLINE_V constexpr int _WRITE_SIZE = 1 << 18;
INLINE_V static char _write_buffer[_WRITE_SIZE], *_write_ptr = _write_buffer;
inline void pc(char c)
{
*_write_ptr++ = c;
if ( __builtin_expect(_write_buffer + _WRITE_SIZE == _write_ptr, false) )
{
fwrite(_write_buffer, 1, _write_ptr - _write_buffer, stdout);
_write_ptr = _write_buffer;
}
}
INLINE_V struct _auto_flush
{
inline ~_auto_flush() { fwrite(_write_buffer, 1, _write_ptr - _write_buffer, stdout); }
} _auto_flush;
#endif
#ifdef CHK_EOF
inline constexpr bool _isdigit(char c) { return ( c & 16 ) && c != EOF; }
inline constexpr bool _isgraph(char c) { return c > 32 && c != EOF; }
#else
inline constexpr bool _isdigit(char c) { return c & 16; }
inline constexpr bool _isgraph(char c) { return c > 32; }
#endif
template < class T >
INLINE_V constexpr bool _is_integer = numeric_limits < T >::is_integer;
template < class T >
INLINE_V constexpr bool _is_signed = numeric_limits < T >::is_signed;
template < class T >
INLINE_V constexpr bool _is_unsigned = _is_integer < T > && !_is_signed < T >;
template <> INLINE_V constexpr bool _is_integer < __int128 > = true;
template <> INLINE_V constexpr bool _is_integer < __uint128_t > = true;
template <> INLINE_V constexpr bool _is_signed < __int128 > = true;
template <> INLINE_V constexpr bool _is_unsigned < __uint128_t > = true;
#undef INLINE_V
inline void read(char &c) { do c = gc(); while ( !_isgraph(c) ); }
inline void read_cstr(char *s)
{
char c = gc(); while ( !_isgraph(c) ) c = gc();
while ( _isgraph(c) ) *s++ = c, c = gc();
*s = 0;
}
inline void read(string &s)
{
char c = gc(); s.clear(); while ( !_isgraph(c) ) c = gc();
while ( _isgraph(c) ) s.push_back(c), c = gc();
}
#ifdef IN_HAS_NEG
template < class T, enable_if_t < _is_signed < T >, int > = 0 >
inline void read(T &x)
{
char c = gc(); bool f = true; x = 0;
while ( !_isdigit(c) ) { if ( c == 45 ) f = false; c = gc(); }
if ( f ) while ( _isdigit(c) ) x = x * 10 + ( c & 15 ), c = gc();
else while ( _isdigit(c) ) x = x * 10 - ( c & 15 ), c = gc();
}
template < class T, enable_if_t < _is_unsigned < T >, int > = 0 >
#else
template < class T, enable_if_t < _is_integer < T >, int > = 0 >
#endif
inline void read(T &x)
{
char c = gc(); while ( !_isdigit(c) ) c = gc();
x = 0; while ( _isdigit(c) ) x = x * 10 + ( c & 15 ), c = gc();
}
inline void write(char c) { pc(c); }
inline void write_cstr(const char *s) { while ( *s ) pc(*s++); }
inline void write(const string &s) { for ( char c : s ) pc(c); }
#ifdef OUT_HAS_NEG
template < class T, enable_if_t < _is_signed < T >, int > = 0 >
inline void write(T x)
{
char buffer[numeric_limits < T >::digits10 + 1]; int digits = 0;
if ( x >= 0 ) do buffer[digits++] = ( x % 10 ) | 48, x /= 10; while ( x );
else { pc(45); do buffer[digits++] = -( x % 10 ) | 48, x /= 10; while ( x ); }
while ( digits ) pc(buffer[--digits]);
}
template < class T, enable_if_t < _is_unsigned < T >, int > = 0 >
#else
template < class T, enable_if_t < _is_integer < T >, int > = 0 >
#endif
inline void write(T x)
{
char buffer[numeric_limits < T >::digits10 + 1]; int digits = 0;
do buffer[digits++] = ( x % 10 ) | 48, x /= 10; while ( x );
while ( digits ) pc(buffer[--digits]);
}
template < int N > struct _tuple_io_helper
{
template < class ...T >
static inline void _read(tuple < T... > &x)
{ _tuple_io_helper < N - 1 >::_read(x), read(get < N - 1 > (x)); }
template < class ...T >
static inline void _write(const tuple < T... > &x)
{ _tuple_io_helper < N - 1 >::_write(x), pc(32), write(get < N - 1 > (x)); }
};
template <> struct _tuple_io_helper < 1 >
{
template < class ...T >
static inline void _read(tuple < T... > &x) { read(get < 0 > (x)); }
template < class ...T >
static inline void _write(const tuple < T... > &x) { write(get < 0 > (x)); }
};
template < class ...T >
inline void read(tuple < T... > &x) { _tuple_io_helper < sizeof...(T) >::_read(x); }
template < class ...T >
inline void write(const tuple < T... > &x) { _tuple_io_helper < sizeof...(T) >::_write(x); }
template < class T1, class T2 >
inline void read(pair < T1, T2 > &x) { read(x.first), read(x.second); }
template < class T1, class T2 >
inline void write(const pair < T1, T2 > &x) { write(x.first), pc(32), write(x.second); }
template < class T1, class ...T2 >
inline void read(T1 &x, T2 &...y) { read(x), read(y...); }
template < class ...T >
inline void read_cstr(char *x, T *...y) { read_cstr(x), read_cstr(y...); }
template < class T1, class ...T2 >
inline void write(const T1 &x, const T2 &...y) { write(x), write(y...); }
template < class ...T >
inline void write_cstr(const char *x, const T *...y) { write_cstr(x), write_cstr(y...); }
template < class T >
inline void print(const T &x) { write(x); }
inline void print_cstr(const char *x) { write_cstr(x); }
template < class T1, class ...T2 >
inline void print(const T1 &x, const T2 &...y) { print(x), pc(32), print(y...); }
template < class ...T >
inline void print_cstr(const char *x, const T *...y) { print_cstr(x), pc(32), print_cstr(y...); }
inline void println() { pc(10); }
inline void println_cstr() { pc(10); }
template < class ...T >
inline void println(const T &...x) { print(x...), pc(10); }
template < class ...T >
inline void println_cstr(const T *...x) { print_cstr(x...), pc(10); }
}
using namespace FastIO;
int n, m, u, v, d[1009], id[1009], nw[1009], l;
int a[1 << 24], b[1 << 24], ea[29], eb[29], ec[29], e[1 << 24], la, lb;
bool g[1009][1009]; ll ans;
int main()
{
read(n, m);
For(i, 1, m) read(u, v), g[u][v] = g[v][u] = true, d[u]++, d[v]++;
iota(id + 1, id + n + 1, 1), sort(id + 1, id + n + 1, [&](int x, int y) { return d[x] > d[y]; });
For(i, 1, n)
{
*nw = id[i], l = 1;
For(j, i + 1, n) if ( g[id[i]][id[j]] ) nw[l++] = id[j];
fill(e, e + l, 0), la = ( l + 1 ) / 2, lb = l - la;
fill(ea, ea + la, 0), fill(eb, eb + lb, 0), fill(ec, ec + la, 0);
fill(a, a + ( 1 << la ), 0), fill(b, b + ( 1 << lb ), 0), *a = *b = 1, *e = ( 1 << lb ) - 1;
For(j, 0, la - 1) For(k, 0, la - 1)
if ( j == k || g[nw[j]][nw[k]] ) ea[j] |= 1 << k;
For(j, 0, lb - 1) For(k, 0, lb - 1)
if ( j == k || g[nw[j + la]][nw[k + la]] ) eb[j] |= 1 << k;
For(j, 0, la - 1) For(k, 0, lb - 1)
if ( g[nw[j]][nw[k + la]] ) ec[j] |= 1 << k;
For(j, 1, ( 1 << la ) - 1)
{
u = j ^ ( j & -j ), v = __lg(j & -j);
if ( a[u] && ( ea[v] & u ) == u ) a[j] = 1;
e[j] = e[u] & ec[v];
}
For(j, 1, ( 1 << lb ) - 1)
{
u = j ^ ( j & -j ), v = __lg(j & -j);
if ( b[u] && ( eb[v] & u ) == u ) b[j] = 1;
}
For(j, 0, lb - 1) For(k, 0, ( 1 << lb ) - 1)
if ( !( k & ( 1 << j ) ) ) b[k | ( 1 << j )] += b[k];
For(j, 0, ( 1 << la ) - 1) if ( j & 1 ) ans += a[j] * b[e[j]];
}
return println(ans), 0;
}
// 想上GM捏 想上GM捏 想上GM捏 想上GM捏 想上GM捏
// 伊娜可爱捏 伊娜贴贴捏
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 7816kb
input:
3 2 1 2 2 3
output:
5
result:
ok single line: '5'
Test #2:
score: 0
Accepted
time: 0ms
memory: 9748kb
input:
3 3 1 2 1 3 2 3
output:
7
result:
ok single line: '7'
Test #3:
score: 0
Accepted
time: 2ms
memory: 9804kb
input:
1000 100 446 789 167 547 254 777 777 185 33 446 777 847 185 877 757 167 72 383 847 446 254 478 959 185 757 446 847 959 959 167 757 847 747 757 446 167 989 757 547 777 33 747 33 254 254 843 33 547 446 980 877 205 185 72 980 959 33 205 877 757 33 847 478 843 757 478 167 877 72 789 877 959 980 478 167 ...
output:
1373
result:
ok single line: '1373'
Test #4:
score: 0
Accepted
time: 318ms
memory: 169884kb
input:
1000 1000 770 105 219 498 686 498 343 534 15 591 919 588 149 588 298 915 551 523 710 116 105 637 523 991 343 476 145 420 604 588 254 120 551 421 476 298 900 710 915 343 445 421 986 867 445 588 219 356 919 105 584 875 991 604 776 919 588 254 919 421 356 348 105 551 15 113 919 15 356 523 343 155 770 9...
output:
6621319
result:
ok single line: '6621319'
Test #5:
score: 0
Accepted
time: 483ms
memory: 200424kb
input:
1000 1000 840 251 559 572 77 993 857 254 176 77 30 423 838 251 862 466 920 254 254 593 593 423 780 575 487 865 952 176 480 77 351 487 620 390 231 496 423 761 993 385 383 390 220 620 862 805 920 838 77 339 838 231 691 384 930 251 840 77 593 993 838 930 176 761 383 761 480 487 251 383 295 390 289 808 ...
output:
6403686
result:
ok single line: '6403686'
Test #6:
score: 0
Accepted
time: 263ms
memory: 106616kb
input:
1000 1000 179 73 322 80 586 342 73 819 973 184 508 131 351 342 576 179 397 23 523 926 684 73 479 722 973 80 576 397 301 508 903 618 672 192 33 903 973 885 523 661 885 8 787 988 647 990 393 211 722 586 751 926 960 322 179 131 131 988 196 342 508 351 672 342 644 926 990 819 301 80 73 397 104 131 678 3...
output:
6066915
result:
ok single line: '6066915'
Test #7:
score: 0
Accepted
time: 277ms
memory: 108200kb
input:
1000 1000 179 707 71 73 410 726 459 410 84 432 500 73 578 864 71 145 538 578 265 145 707 565 674 772 859 676 826 71 538 459 548 479 609 45 674 707 30 145 45 726 41 73 446 265 145 479 587 642 179 632 908 548 674 410 361 632 500 642 929 976 73 446 41 361 71 726 179 212 341 929 45 859 826 179 632 144 4...
output:
6242289
result:
ok single line: '6242289'
Test #8:
score: 0
Accepted
time: 302ms
memory: 169760kb
input:
1000 1000 146 917 487 589 225 927 972 449 969 728 99 288 615 564 728 146 880 561 563 745 442 880 118 392 634 564 636 917 442 738 280 254 225 710 254 449 221 564 394 969 556 99 634 589 976 301 117 487 561 867 98 880 392 880 917 819 556 634 941 969 653 927 972 615 146 819 969 98 653 941 809 699 590 30...
output:
9171879
result:
ok single line: '9171879'
Test #9:
score: 0
Accepted
time: 2ms
memory: 9896kb
input:
1000 1000 709 558 844 316 552 395 944 619 805 279 837 392 822 772 964 805 597 397 814 344 527 401 964 299 922 782 746 349 795 537 945 57 527 176 815 937 257 955 245 108 245 593 932 155 597 812 18 856 116 218 671 142 511 945 481 405 966 695 782 38 130 638 470 692 671 307 837 571 925 43 411 249 613 38...
output:
2186
result:
ok single line: '2186'
Test #10:
score: 0
Accepted
time: 1ms
memory: 8380kb
input:
1000 1000 833 350 567 76 488 416 350 135 874 275 555 996 263 152 14 380 409 442 672 836 490 5 421 901 781 875 135 209 162 442 6 47 111 180 317 162 876 368 393 656 712 535 583 976 918 591 29 887 436 599 702 5 512 778 901 111 423 591 274 599 686 655 2 656 444 172 836 800 865 920 3 19 781 375 157 683 8...
output:
2193
result:
ok single line: '2193'
Test #11:
score: 0
Accepted
time: 0ms
memory: 10352kb
input:
1000 1000 655 894 253 168 615 321 526 160 225 578 845 473 14 839 321 659 138 448 575 787 342 557 338 501 192 504 888 172 531 616 83 136 623 137 746 344 385 337 505 394 634 740 242 449 321 630 804 971 386 160 466 641 83 133 570 527 448 273 888 653 3 479 467 18 630 93 271 574 653 5 764 370 972 466 501...
output:
2159
result:
ok single line: '2159'
Test #12:
score: 0
Accepted
time: 1ms
memory: 10004kb
input:
1000 1000 210 626 59 74 95 486 328 63 894 222 908 764 299 197 871 600 954 241 431 660 816 997 186 34 737 604 889 568 454 115 61 933 417 221 279 971 333 340 143 374 168 409 426 50 875 423 86 413 805 719 222 319 461 864 244 679 49 220 98 579 329 737 568 926 328 330 694 445 318 480 576 748 242 989 968 ...
output:
2013
result:
ok single line: '2013'
Test #13:
score: 0
Accepted
time: 0ms
memory: 10268kb
input:
1000 1000 937 639 771 95 626 134 869 66 465 29 889 944 194 239 284 303 935 111 795 806 737 770 665 343 862 528 232 571 342 458 401 490 452 628 425 384 998 578 192 168 64 651 486 311 840 667 400 255 364 206 486 289 761 912 189 907 158 339 891 336 392 782 598 233 899 539 19 780 190 535 933 700 500 232...
output:
2004
result:
ok single line: '2004'
Test #14:
score: 0
Accepted
time: 1ms
memory: 8652kb
input:
1000 1000 568 607 217 544 12 124 766 801 924 290 957 218 816 552 913 189 982 916 896 289 304 74 426 190 844 543 849 972 386 59 626 472 869 838 234 581 232 707 623 685 873 344 295 496 352 557 314 35 329 432 155 422 803 322 42 735 36 760 249 306 706 533 748 161 887 911 872 64 440 450 662 607 274 659 7...
output:
2002
result:
ok single line: '2002'
Test #15:
score: 0
Accepted
time: 1ms
memory: 8776kb
input:
1000 1000 726 492 65 652 168 218 347 489 35 415 73 324 80 419 237 352 378 3 708 286 933 810 116 563 819 610 670 386 392 940 434 926 341 617 820 842 618 974 592 344 724 578 955 761 26 902 545 496 688 636 273 225 749 840 661 784 917 595 503 84 414 252 925 877 352 479 792 914 54 666 324 257 642 637 801...
output:
2002
result:
ok single line: '2002'
Test #16:
score: 0
Accepted
time: 1ms
memory: 9920kb
input:
1000 1000 344 107 264 268 28 38 211 260 741 682 654 885 607 213 610 296 869 556 685 269 996 929 61 370 804 605 786 570 41 448 104 549 245 166 36 84 265 135 704 409 60 299 895 645 868 140 3 483 448 341 778 460 930 13 796 688 936 751 808 458 859 502 918 43 920 287 680 976 918 172 378 156 962 834 635 3...
output:
2002
result:
ok single line: '2002'
Test #17:
score: -100
Runtime Error
input:
1000 1000 117 152 117 375 190 586 117 586 278 546 788 450 117 90 511 586 450 595 586 492 870 278 17 117 586 275 520 471 796 117 520 112 117 431 292 520 320 520 278 95 586 677 450 402 298 520 586 109 450 409 520 607 684 278 520 898 340 278 17 520 586 64 586 100 520 647 450 270 520 617 685 117 117 985...