Submission #1302929

#TimeUsernameProblemLanguageResultExecution timeMemory
1302929FaggiFriend (IOI14_friend)C++20
27 / 100
2 ms584 KiB
#include <bits/stdc++.h>
#define ll long long
#define sz(x) int(x.size())
#define forn(i, n) for (i = 0; i < n; i++)
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define fr first
#define se second
using namespace std;

const int MAXN = 1e5 + 1;

vector<ll> grafo[MAXN];

bool vis[MAXN];
ll conf[MAXN];
pair<ll,ll>dfs(ll nod)
{
    vis[nod]=1;
    pair<ll,ll>ret={conf[nod],0}, act;
    for(auto k:grafo[nod])
    {
        if(vis[k])
            continue;
        act=dfs(k);
        ret.se+=max(act.fr,act.se);
        ret.fr+=act.se;
    }
    return ret;
}
ll id[MAXN];
int findSample(int n, int confidence[], int host[], int protocol[])
{
    int ans = 0, act = 0;
    ll i, j;
    for(i=0; i<n; i++)
    {
        conf[i]=confidence[i];
        id[i]=i;
    }
    for (i = 1; i < n; i++)
    {
        if (protocol[i] == 0)
        {
            grafo[i].pb(id[host[i]]);
            grafo[id[host[i]]].pb(i);
        }
        else if (protocol[i] == 1)
        {
            conf[id[host[i]]]+=conf[i];
            id[i]=id[host[i]];
        }
    }
    for(i=0; i<n; i++)
    {
        if(vis[id[i]]==0)
        {
            pair<ll,ll>ret=dfs(id[i]);
            ans+=max(ret.fr,ret.se);
        }
    }
    return ans;
}
#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...