Submission #19167587


Source Code Expand

/**
 * Dont raise your voice, improve your argument.
 * --Desmond Tutu
 */

#include <bits/stdc++.h>
using namespace std;

const bool ready = []() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed << setprecision(12);
    return true;
}
();

using ld=long double;
const ld PI = acos(-1);
using ll= long long;
#define int ll
#define all(v) (v).begin(), (v).end()
#define fori(n) for(int i=0; i<int(n); i++)

#define cini(i) int i; cin>>i;
#define cins(s) string s; cin>>s;
#define cind(d) ld d; cin>>d;
#define cinai(a,n) vi a(n); fori(n) { cin>>a[i]; }
#define cinas(s,n) vs s(n); fori(n) { cin>>s[i]; }
#define cinad(a,n) vd a(n); fori(n) { cin>>a[i]; }

using pii= pair<int, int>;
using pdd= pair<ld, ld>;
using vd= vector<ld>;
using vb= vector<bool>;
using vi= vector<int>;
using vvi= vector<vi>;
using vs= vector<string>;

#define endl "\n"

/* We can add a vertex to a group if that vertex has edge to all members.
 *
 * We can merge two groups if all members of the group have eges to all
 * members of other group.
 */
const int INF=1e9;
void solve() {
    cini(n);
    cini(m);
    vector<vb> adj(n, vb(n));
    for(int i=0; i<m; i++) {
        cini(a);
        a--;
        cini(b);
        b--;
        adj[a][b]=true;
        adj[b][a]=true;
    }

    int ans=INF;
    function<void(vvi,int)> go=[&](vvi groups, const int v) {
        /* we can add the current vertex to each group possible, or to a new group */
        /*
                cerr<<"sz="<<groups.size()<<" groups="<<endl;
                for(auto vec : groups) {
                    for(int j : vec)
                        cerr<<j+1<<" ";
                    cerr<<endl;
                }
                */

        if(v==n) {
            ans=min(ans, (int)groups.size());
            return;
        }

        if((int)groups.size()>=ans)
            return;

        for(size_t i=0; i<groups.size(); i++) {
            bool ok=true;
            for(int g : groups[i]) {
                if(!adj[v][g]) {
                    ok=false;
                    break;
                }
            }
            if(ok) {
                groups[i].push_back(v);
                //cerr<<"adding v="<<v+1<<" to group="<<i<<endl;
                go(groups, v+1);
                groups[i].pop_back();
            }
        }
        vi ngroup;
        ngroup.push_back(v);
        groups.push_back(ngroup);
        go(groups, v+1);
    };

    vvi g;
    go(g, 0);
    cout<<ans<<endl;
}

signed main() {
    solve();
}

// FIRST THINK, THEN CODE
// DO NOT JUMP BETWEEN PROBLEMS

Submission Info

Submission Time
Task F - Close Group
User spookywooky
Language C++ (GCC 9.2.1)
Score 600
Code Size 2684 Byte
Status AC
Exec Time 7 ms
Memory 3656 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 4
AC × 44
Set Name Test Cases
Sample 01_sample.txt, 02_sample.txt, 03_sample.txt, 04_sample.txt
All 01_sample.txt, 02_sample.txt, 03_sample.txt, 04_sample.txt, 05_tiny.txt, 06_tiny.txt, 07_tiny.txt, 08_tiny.txt, 09_tiny.txt, 10_tiny.txt, 11_tiny.txt, 12_small.txt, 13_small.txt, 14_small.txt, 15_small.txt, 16_small.txt, 17_small.txt, 18_small.txt, 19_small.txt, 20_small.txt, 21_small.txt, 22_small.txt, 23_small.txt, 24_small.txt, 25_small.txt, 26_small.txt, 27_large.txt, 28_large.txt, 29_large.txt, 30_large.txt, 31_large.txt, 32_large.txt, 33_large.txt, 34_large.txt, 35_large.txt, 36_large.txt, 37_large.txt, 38_large.txt, 39_large.txt, 40_large.txt, 41_large.txt, 42_max.txt, 43_max.txt, 44_max.txt
Case Name Status Exec Time Memory
01_sample.txt AC 7 ms 3552 KiB
02_sample.txt AC 3 ms 3540 KiB
03_sample.txt AC 2 ms 3560 KiB
04_sample.txt AC 2 ms 3612 KiB
05_tiny.txt AC 1 ms 3636 KiB
06_tiny.txt AC 2 ms 3560 KiB
07_tiny.txt AC 2 ms 3496 KiB
08_tiny.txt AC 2 ms 3552 KiB
09_tiny.txt AC 2 ms 3556 KiB
10_tiny.txt AC 2 ms 3592 KiB
11_tiny.txt AC 2 ms 3604 KiB
12_small.txt AC 2 ms 3556 KiB
13_small.txt AC 3 ms 3484 KiB
14_small.txt AC 2 ms 3596 KiB
15_small.txt AC 2 ms 3500 KiB
16_small.txt AC 2 ms 3600 KiB
17_small.txt AC 2 ms 3632 KiB
18_small.txt AC 3 ms 3540 KiB
19_small.txt AC 1 ms 3472 KiB
20_small.txt AC 2 ms 3592 KiB
21_small.txt AC 5 ms 3492 KiB
22_small.txt AC 3 ms 3476 KiB
23_small.txt AC 6 ms 3592 KiB
24_small.txt AC 3 ms 3644 KiB
25_small.txt AC 2 ms 3552 KiB
26_small.txt AC 3 ms 3544 KiB
27_large.txt AC 2 ms 3656 KiB
28_large.txt AC 3 ms 3604 KiB
29_large.txt AC 2 ms 3652 KiB
30_large.txt AC 2 ms 3600 KiB
31_large.txt AC 3 ms 3480 KiB
32_large.txt AC 2 ms 3620 KiB
33_large.txt AC 2 ms 3568 KiB
34_large.txt AC 3 ms 3656 KiB
35_large.txt AC 2 ms 3604 KiB
36_large.txt AC 6 ms 3564 KiB
37_large.txt AC 1 ms 3488 KiB
38_large.txt AC 2 ms 3492 KiB
39_large.txt AC 4 ms 3604 KiB
40_large.txt AC 3 ms 3544 KiB
41_large.txt AC 3 ms 3556 KiB
42_max.txt AC 3 ms 3488 KiB
43_max.txt AC 2 ms 3568 KiB
44_max.txt AC 2 ms 3552 KiB