Submission #1168932

#TimeUsernameProblemLanguageResultExecution timeMemory
1168932anmattroiFriend (IOI14_friend)C++17
11 / 100
210 ms131072 KiB
#include "friend.h"
#include <bits/stdc++.h>
#define maxn 100005
using namespace std;

int f[1024], s[1024];

vector<int> adj[maxn];

int findSample(int n, int confidence[], int host[], int protocol[]){
    for (int i = 0; i < (1<<n); i++) f[i] = s[i] = 0;
    for (int i = 0; i < n; i++) adj[i].clear();
    for (int i = 1; i < n; i++) {
        switch (protocol[i]) {
        case 0 :
            adj[host[i]].emplace_back(i);
            adj[i].emplace_back(host[i]);
            break;
        case 1 :
            for (int v : adj[host[i]]) {
                adj[v].emplace_back(i);
                adj[i].emplace_back(v);
            }
            break;
        default :

            for (int v : adj[host[i]]) {
                adj[v].emplace_back(i);
                adj[i].emplace_back(v);
            }
            adj[host[i]].emplace_back(i);
            adj[i].emplace_back(host[i]);
        }
    }
    for (int i = 0; i < n; i++)
        for (int j : adj[i]) {
            f[(1<<i)|(1<<j)] = 1;
            int mask = ((1<<i)|(1<<j));
        }

    for (int i = 0; i < n; i++) for (int mask = 0; mask < (1<<n); mask++) if (mask>>i&1) f[mask] += f[mask^(1<<i)];



    int ans = 0;
    for (int i = 1; i < (1<<n); i++) {
        s[i] = s[i-(i&-i)] + confidence[__lg(i&-i)];
        f[i] ? 0 : ans = max(ans, s[i]);
    }
    return ans;
}
/*
6
13 3 6 20 10 15
0 0
0 1
1 2
2 1
0 0
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...