답안 #582376

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
582376 2022-06-23T17:01:42 Z kamelfanger83 친구 (IOI14_friend) C++17
46 / 100
31 ms 1428 KB
#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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Incorrect 1 ms 212 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Incorrect 31 ms 1428 KB Output isn't correct
13 Halted 0 ms 0 KB -