Submission #335103

#TimeUsernameProblemLanguageResultExecution timeMemory
335103daniel920712Friend (IOI14_friend)C++14
35 / 100
8 ms2944 KiB
#include "friend.h" #include <iostream> #include <vector> // Find out best sample using namespace std; int what[100005]; vector < int > Next[100005]; bool have[5][100005]={0}; int DP[5][100005]={0}; int how[100005]; int use[100005]={0}; int who[100005]={0}; int vis[100005]={0}; int DFS(int here,int deg,int fa) { if(vis[here]) return 0; vis[here]=1; if(deg%2==1&&!use[here]) { use[here]=1; who[here]=fa; return 1; } else if(deg%2==1) { if(DFS(who[here],deg+1,here)) { who[here]=fa; return 1; } } else { for(auto i:Next[here]) { if(DFS(i,deg+1,here)) { who[here]=i; return 1; } } } return 0; } int F(int x,int y,int fa) { if(have[x][y]) return DP[x][y]; have[x][y]=1; for(auto i:Next[y]) { if(i==fa) continue; if(x==0) DP[x][y]+=max(F(0,i,y),F(1,i,y)); else DP[x][y]+=F(0,i,y); } if(x==1) DP[x][y]+=how[y]; return DP[x][y]; } int findSample(int n,int confidence[],int host[],int protocol[]) { int ans=0,i,j,x=0,y=0; for(i=0;i<n;i++) if(confidence[i]!=1||protocol[i]==2) break; if(i==n) { for(i=1;i<n;i++) { if(protocol[i]==0) { Next[host[i]].push_back(i); Next[i].push_back(host[i]); } else { for(auto j:Next[host[i]]) { Next[j].push_back(i); Next[i].push_back(j); } } } for(i=0;i<n;i++) { for(j=0;j<n;j++) vis[j]=0; if(!use[i]&&DFS(i,0,-1)) { use[i]=1; ans++; } } return ans; } what[0]=0; x+=confidence[0]; if(protocol[1]==1) ans+=confidence[0]; if(protocol[1]==0) { for(i=0;i<n;i++) how[i]=confidence[i]; for(i=1;i<n;i++) { Next[host[i]].push_back(i); Next[i].push_back(host[i]); } return max(F(0,0,-1),F(1,0,-1)); } else { for(i=1;i<n;i++) { if(protocol[i]==1) ans+=confidence[i]; else ans=max(ans,confidence[i]); } } return max(max(x,y),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...