Submission #582375

#TimeUsernameProblemLanguageResultExecution timeMemory
582375kamelfanger83Friend (IOI14_friend)C++17
Compilation error
0 ms0 KiB
#include <iostream>
#include <vector>
#include "friend.h"

using namespace std;

pair<int, int> getmax(int i, vector<vector<int>>& children, int* confidence){
    int bo = 0;
    int bm = confidence[i];
    for(int child : children[i]){
        pair<int, int> got = getmax(child, children, confidence);
        bo += got.first;
        bm += got.second;
    }
    bm = max(bm, bo);
    return make_pair(bm, bo);   
}

int findSample(int n, int confidence[], int host[], int protocol[]){
    if(n <= 10){
        vector<vector<bool>> cons (n, vector<bool> (n, false));
        for(int hoster = 1; hoster < n; hoster++){
            if(protocol[hoster] == 0){
                cons[hoster][host[hoster]] = true;
                cons[host[hoster]][hoster] = true;
            }
            else if(protocol[hoster] == 1){
                for(int friender = 0; friender < n; friender++){
                    if(cons[host[hoster]][friender]) cons[friender][hoster] = cons[hoster][friender] = true;
                } 
            }
            else {
                for(int friender = 0; friender < n; friender++){
                    if(cons[host[hoster]][friender]) cons[friender][hoster] = cons[hoster][friender] = true;
                } 
                cons[hoster][host[hoster]] = true;
                cons[host[hoster]][hoster] = true;
            }
        }
        int best = 0;
        for(int bitmask = 0; bitmask < (1 << n); bitmask++){
            int summ = 0;
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    if(cons[i][j] && ((bitmask & (1 << i)) != 0) && ((bitmask & (1 << j)) != 0)) goto no;
                }
            }
            for(int summer = 0; summer < n; summer++){
                summ += confidence[summer] * ((bitmask & (1 << summer)) != 0);
            }
            best = max(best, summ);
            no:
            ;
        }
        return best;
    }
    if(protocol[1] == 1){
        int summ = 0;
        for(int summer = 0; summer < n; summer++) summ += confidence[summer];
        return summ;
    }
    if(protocol[1] == 2){
        int maxx = 0;
        for(int maxxer = 0; maxxer < n; maxxer++) maxx = max(maxx, confidence[maxxer]);
        return maxx;
    }
    if(protocol[1] == 0){
        vector<vector<int>> children (n);
        for(int hoster = 1; hoster < n; hoster++){
            children[host[hoster]].push_back(hoster);
        }
        return getmax(0, children, confidence).first;
    }
    return 0;
}

int main(){
    int confidence [6] = {13, 3, 6, 20, 10, 15};
    int host [6] = {0, 0, 0, 1, 2, 0,};
    int protocol [6] = {0, 0, 1, 2, 1, 0};
    cout << findSample(6, confidence, host, protocol);
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccMIamTU.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccmxh2YU.o:friend.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status