Submission #1064837

#TimeUsernameProblemLanguageResultExecution timeMemory
1064837NemanjaSo2005Friend (IOI14_friend)C++17
0 / 100
5 ms924 KiB
#include "friend.h"
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1005;
int N,niz[maxn],par[maxn];
int prosli[maxn],pvred,boja[maxn];
bool uparen[maxn];
vector<int> koji[2];
ll res=0;
mt19937_64 rng;
bool postoji[maxn][maxn];
void grana(int a,int b){
   postoji[a][b]=true;
   postoji[b][a]=true;
}
void dfs(int gde,int bb){
   //cout<<"NA "<<gde<<endl;
   koji[bb].push_back(gde);
   boja[gde]=bb;
   bb^=1;
   prosli[gde]=pvred;
   for(int x=1;x<=N;x++){
    //  cout<<x<<" "<<postoji[gde][x]<<endl;
      if(prosli[x]!=pvred and postoji[gde][x])
         dfs(x,bb);
   }
   return;
}
bool upari(int x){
   if(prosli[x]==pvred)
      return false;
   prosli[x]=pvred;
   for(int i=1;i<=N;i++){
      if(!postoji[i][x])
         continue;
      if(par[i]==0){
         par[i]=x;
         return true;
      }
      if(upari(par[i])){
         par[i]=x;
         return true;
      }
   }
   return false;
}
int calcmatching(){
   pvred++;
   dfs(1,1);
   //if(koji[0]>koji[1])
   //   swap(koji[0],koji[1]);
   //for(int i=1;i<koji[0].size();i++)
    //  swap(koji[0][i],koji[0][rng()%(i+1)]);
/*   for(int x:koji[0]){
      for(int i=1;i<=N;i++){
         if(!postoji[x][i])
            continue;
         if(par[i]!=0)
            continue;
         par[i]=x;
         uparen[x]=true;
         break;
      }
   }*/
   //cout<<koji[0].size()<<" sz "<<koji[1].size()<<endl;
   for(int x:koji[0]){
     // cout<<"POKUSAJ "<<x<<endl;
      if(uparen[x])
         continue;
      pvred++;
      uparen[x]=upari(x);
   }
   int br=0;
   for(int x:koji[0])
      if(uparen[x])
         br++;
   return br;
}
int findSample(int n,int confidence[],int host[],int protocol[]){
	N=n;
	rng.seed(52366);
	for(int i=1;i<=N;i++)
      niz[i]=confidence[i-1];
   for(int i=1;i<N;i++){
      int x=host[i]+1;
      int p=protocol[i];
      if(p==1 or p==2){
         for(int aa=1;aa<=i;aa++)
            if(postoji[x][aa])
               grana(aa,i+1);
      }
      if(p==0 or p==2)
         grana(x,i+1);
   }

	return N-calcmatching();
}
#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...