Submission #1155310

#TimeUsernameProblemLanguageResultExecution timeMemory
1155310alexddFriend (IOI14_friend)C++20
19 / 100
2 ms2888 KiB
#include "friend.h"
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100005];
int parent[100005];
vector<int> con[100005];
int adevarat[100005];
int dp[100005][2];
void dfs(int nod)
{
    dp[nod][1] = a[nod];
    dp[nod][0] = 0;
    for(int adj:con[nod])
    {
        dfs(adj);
        dp[nod][1] += dp[adj][0];
        dp[nod][0] += max(dp[adj][1], dp[adj][0]);
    }
}
int findSample(int cit_n, int confidence[], int host[], int protocol[])
{
    n = cit_n;
    for(int i=0;i<n;i++)
    {
        a[i] = confidence[i];
        parent[i] = -1;
    }

    for(int i=1;i<n;i++)
    {
        if(protocol[i]==0)
        {
            parent[i] = adevarat[host[i]];
            con[parent[i]].push_back(i);
            adevarat[i] = i;
        }
        else if(protocol[i]==1)
        {
            adevarat[i] = host[i];
            a[adevarat[i]] += a[i];
        }
        else
        {

        }
    }
    int sum=0;
    for(int i=0;i<n;i++)
    {
        if(adevarat[i]==i && parent[i]==-1)
        {
            dfs(i);
            sum += max(dp[i][0], dp[i][1]);
        }
    }
    return sum;
}
#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...