Submission #5400431
Source Code Expand
#include<bits/stdc++.h> using namespace std; using int64 = long long; const int mod = 1e9 + 7; const int64 infll = (1LL << 62) - 1; const int inf = (1 << 30) - 1; struct IoSetup { IoSetup() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(10); cerr << fixed << setprecision(10); } } iosetup; template< typename T1, typename T2 > ostream &operator<<(ostream &os, const pair< T1, T2 > &p) { os << p.first << " " << p.second; return os; } template< typename T1, typename T2 > istream &operator>>(istream &is, pair< T1, T2 > &p) { is >> p.first >> p.second; return is; } template< typename T > ostream &operator<<(ostream &os, const vector< T > &v) { for(int i = 0; i < (int) v.size(); i++) { os << v[i] << (i + 1 != v.size() ? " " : ""); } return os; } template< typename T > istream &operator>>(istream &is, vector< T > &v) { for(T &in : v) is >> in; return is; } template< typename T1, typename T2 > inline bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); } template< typename T1, typename T2 > inline bool chmin(T1 &a, T2 b) { return a > b && (a = b, true); } template< typename T = int64 > vector< T > make_v(size_t a) { return vector< T >(a); } template< typename T, typename... Ts > auto make_v(size_t a, Ts... ts) { return vector< decltype(make_v< T >(ts...)) >(a, make_v< T >(ts...)); } template< typename T, typename V > typename enable_if< is_class< T >::value == 0 >::type fill_v(T &t, const V &v) { t = v; } template< typename T, typename V > typename enable_if< is_class< T >::value != 0 >::type fill_v(T &t, const V &v) { for(auto &e : t) fill_v(e, v); } template< typename T > struct edge { int src, to; T cost; edge(int to, T cost) : src(-1), to(to), cost(cost) {} edge(int src, int to, T cost) : src(src), to(to), cost(cost) {} edge &operator=(const int &x) { to = x; return *this; } operator int() const { return to; } }; template< typename T > using Edges = vector< edge< T > >; template< typename T > using WeightedGraph = vector< Edges< T > >; using UnWeightedGraph = vector< vector< int > >; template< typename T > using Matrix = vector< vector< T > >; template< typename T > T maximum_clique(Matrix< bool > g, function< T(vector< int >) > f) { int N = (int) g.size(), M = 0; vector< int > deg(N), v(N); for(int i = 0; i < N; i++) { for(int j = 0; j < i; j++) { assert(g[i][j] == g[j][i]); if(g[i][j]) { ++deg[i]; ++M; } } } T t = 0; int lim = (int) sqrt(2 * M); for(int i = 0; i < N; i++) { vector< int > notice; for(int j = 0; j < N; j++) { if(!v[j] && deg[j] < lim) { for(int k = 0; k < N; k++) { if(j == k) continue; if(g[j][k]) notice.emplace_back(k); } notice.emplace_back(j); break; } } if(notice.empty()) break; int neighbor = (int) notice.size() - 1; vector< int > bit(neighbor); for(int j = 0; j < neighbor; j++) { for(int k = 0; k < j; k++) { if(!g[notice[j]][notice[k]]) { bit[j] |= 1 << k; bit[k] |= 1 << j; } } } for(int j = 0; j < (1 << neighbor); j++) { bool ok = true; for(int k = 0; k < neighbor; k++) { if((j >> k) & 1) ok &= (j & bit[k]) == 0; } if(ok) { vector< int > stock{notice.back()}; for(int k = 0; k < neighbor; k++) { if((j >> k) & 1) stock.emplace_back(notice[k]); } t = max(t, f(stock)); } } v[notice.back()] = true; for(int j = 0; j < N; j++) { if(g[j][notice.back()]) { --deg[j]; g[notice.back()][j] = g[j][notice.back()] = false; } } } vector< int > notice; for(int j = 0; j < N; j++) { if(!v[j]) notice.emplace_back(j); } int neighbor = (int) notice.size(); vector< int > bit(neighbor); for(int j = 0; j < neighbor; j++) { for(int k = 0; k < j; k++) { if(!g[notice[j]][notice[k]]) { bit[j] |= 1 << k; bit[k] |= 1 << j; } } } for(int j = 0; j < (1 << neighbor); j++) { bool ok = true; for(int k = 0; k < neighbor; k++) { if((j >> k) & 1) ok &= (j & bit[k]) == 0; } if(ok) { vector< int > stock; for(int k = 0; k < neighbor; k++) { if((j >> k) & 1) stock.emplace_back(notice[k]); } t = max(t, f(stock)); } } return t; } int main() { int N, M; cin >> N >> M; Matrix< bool > g(N, vector< bool >(N)); for(int i = 0; i < M; i++) { int x, y; cin >> x >> y; --x, --y; g[x][y] = true; g[y][x] = true; } function< int(vector< int >) > f = [](vector< int > t) { return t.size(); }; cout << maximum_clique(g, f) << endl; }
Submission Info
Submission Time | |
---|---|
Task | D - 派閥 |
User | ei13333 |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 4986 Byte |
Status | AC |
Exec Time | 2 ms |
Memory | 256 KB |
Judge Result
Set Name | all | ||
---|---|---|---|
Score / Max Score | 100 / 100 | ||
Status |
|
Set Name | Test Cases |
---|---|
all | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_01.txt | AC | 1 ms | 256 KB |
00_sample_02.txt | AC | 1 ms | 256 KB |
00_sample_03.txt | AC | 1 ms | 256 KB |
00_sample_04.txt | AC | 1 ms | 256 KB |
test_01.txt | AC | 1 ms | 256 KB |
test_02.txt | AC | 1 ms | 256 KB |
test_03.txt | AC | 1 ms | 256 KB |
test_04.txt | AC | 1 ms | 256 KB |
test_05.txt | AC | 1 ms | 256 KB |
test_06.txt | AC | 1 ms | 256 KB |
test_07.txt | AC | 1 ms | 256 KB |
test_08.txt | AC | 1 ms | 256 KB |
test_09.txt | AC | 1 ms | 256 KB |
test_10.txt | AC | 1 ms | 256 KB |
test_11.txt | AC | 1 ms | 256 KB |
test_12.txt | AC | 1 ms | 256 KB |
test_13.txt | AC | 1 ms | 256 KB |
test_14.txt | AC | 1 ms | 256 KB |
test_15.txt | AC | 1 ms | 256 KB |
test_16.txt | AC | 1 ms | 256 KB |
test_17.txt | AC | 1 ms | 256 KB |
test_18.txt | AC | 1 ms | 256 KB |
test_19.txt | AC | 1 ms | 256 KB |
test_20.txt | AC | 2 ms | 256 KB |
test_21.txt | AC | 1 ms | 256 KB |
test_22.txt | AC | 2 ms | 256 KB |
test_23.txt | AC | 2 ms | 256 KB |
test_24.txt | AC | 2 ms | 256 KB |
test_25.txt | AC | 1 ms | 256 KB |
test_26.txt | AC | 1 ms | 256 KB |
test_27.txt | AC | 1 ms | 256 KB |
test_28.txt | AC | 1 ms | 256 KB |
test_29.txt | AC | 1 ms | 256 KB |
test_30.txt | AC | 1 ms | 256 KB |
test_31.txt | AC | 1 ms | 256 KB |
test_32.txt | AC | 1 ms | 256 KB |
test_33.txt | AC | 2 ms | 256 KB |
test_34.txt | AC | 1 ms | 256 KB |
test_35.txt | AC | 2 ms | 256 KB |
test_36.txt | AC | 2 ms | 256 KB |
test_37.txt | AC | 1 ms | 256 KB |
test_38.txt | AC | 2 ms | 256 KB |
test_39.txt | AC | 1 ms | 256 KB |
test_40.txt | AC | 1 ms | 256 KB |
test_41.txt | AC | 2 ms | 256 KB |
test_42.txt | AC | 2 ms | 256 KB |
test_43.txt | AC | 1 ms | 256 KB |
test_44.txt | AC | 1 ms | 256 KB |
test_45.txt | AC | 1 ms | 256 KB |
test_46.txt | AC | 2 ms | 256 KB |
test_47.txt | AC | 2 ms | 256 KB |
test_48.txt | AC | 2 ms | 256 KB |
test_49.txt | AC | 1 ms | 256 KB |
test_50.txt | AC | 1 ms | 256 KB |
test_51.txt | AC | 1 ms | 256 KB |
test_52.txt | AC | 1 ms | 256 KB |
test_53.txt | AC | 1 ms | 256 KB |
test_54.txt | AC | 1 ms | 256 KB |
test_55.txt | AC | 1 ms | 256 KB |
test_56.txt | AC | 1 ms | 256 KB |
test_57.txt | AC | 2 ms | 256 KB |
test_58.txt | AC | 2 ms | 256 KB |
test_59.txt | AC | 2 ms | 256 KB |
test_60.txt | AC | 2 ms | 256 KB |
test_61.txt | AC | 2 ms | 256 KB |
test_62.txt | AC | 1 ms | 256 KB |
test_63.txt | AC | 1 ms | 256 KB |
test_64.txt | AC | 1 ms | 256 KB |
test_65.txt | AC | 1 ms | 256 KB |
test_66.txt | AC | 1 ms | 256 KB |
test_67.txt | AC | 1 ms | 256 KB |
test_68.txt | AC | 1 ms | 256 KB |
test_69.txt | AC | 1 ms | 256 KB |
test_70.txt | AC | 1 ms | 256 KB |