Submission #991883

#TimeUsernameProblemLanguageResultExecution timeMemory
991883huutuanFriend (IOI14_friend)C++14
27 / 100
15 ms1368 KiB
#include "friend.h" #include <bits/stdc++.h> using namespace std; namespace sub1{ bool adj[30][30]; bool check(int n,int confidence[],int host[],int protocol[]){ return n<=20; } int solve(int n,int confidence[],int host[],int protocol[]){ for (int i=1; i<n; ++i){ if (protocol[i]==0){ adj[i][host[i]]=1; adj[host[i]][i]=1; }else if (protocol[i]==1){ for (int j=0; j<i; ++j) if (adj[host[i]][j]){ adj[i][j]=1; adj[j][i]=1; } }else{ for (int j=0; j<i; ++j) if (adj[host[i]][j] || j==host[i]){ adj[i][j]=1; adj[j][i]=1; } } } int ans=0; for (int i=0; i<(1<<n); ++i){ int cur=0; bool check=1; for (int j=0; j<n; ++j) if (i>>j&1){ cur+=confidence[j]; for (int k=j+1; k<n; ++k) if (i>>k&1){ check&=!adj[j][k]; } } if (check) ans=max(ans, cur); } return ans; } } namespace sub2{ bool check(int n,int confidence[],int host[],int protocol[]){ return *min_element(protocol+1, protocol+n)==1 && *max_element(protocol+1, protocol+n)==1; } int solve(int n,int confidence[],int host[],int protocol[]){ return accumulate(confidence, confidence+n, 0); } } namespace sub3{ bool check(int n,int confidence[],int host[],int protocol[]){ return *min_element(protocol+1, protocol+n)==2 && *max_element(protocol+1, protocol+n)==2; } struct DSU{ vector<int> lab, val; void init(int n, int confidence[]){ lab.assign(n, -1); vector<int>(confidence, confidence+n).swap(val); } int find_set(int u){ return lab[u]<0?u:lab[u]=find_set(lab[u]); } void union_sets(int u, int v){ u=find_set(u); v=find_set(v); if (u!=v){ if (lab[u]>lab[v]) swap(u, v); lab[u]+=lab[v]; lab[v]=u; val[u]=max(val[u], val[v]); val[v]=0; } } } dsu; int solve(int n,int confidence[],int host[],int protocol[]){ dsu.init(n, confidence); for (int i=1; i<n; ++i) dsu.union_sets(i, host[i]); return accumulate(dsu.val.begin(), dsu.val.end(), 0); } } // Find out best sample int findSample(int n,int confidence[],int host[],int protocol[]){ if (sub3::check(n, confidence, host, protocol)) return sub3::solve(n, confidence, host, protocol); if (sub1::check(n, confidence, host, protocol)) return sub1::solve(n, confidence, host, protocol); if (sub2::check(n, confidence, host, protocol)) return sub2::solve(n, confidence, host, protocol); return -1; }
#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...