Submission #834901

#TimeUsernameProblemLanguageResultExecution timeMemory
834901oscar1fSplit the Attractions (IOI19_split)C++17
100 / 100
73 ms13944 KiB
#include<bits/stdc++.h> #include "split.h" using namespace std; const int MAX_SOM=100*1000+5; int nbSom,nbAre,somPere,autreCompo,trouve,reste; vector<int> rep; vector<pair<int,int>> obj; vector<int> adja[MAX_SOM]; int dv[MAX_SOM]; int prof[MAX_SOM]; int interdit[MAX_SOM]; int DFS(int pos) { if (prof[pos]==0) { prof[pos]=1; for (int i:adja[pos]) { prof[pos]+=DFS(i); } //cout<<pos<<" "<<prof[pos]<<endl; return prof[pos]; } return 0; } int calcDeb(int pos) { for (int i:adja[pos]) { if (prof[i]<prof[pos] and prof[i]>=obj[0].first) { return calcDeb(i); } } return pos; } void trouveMonte(int pos) { if (dv[pos]==0) { dv[pos]=1; for (int i:adja[pos]) { if (prof[i]>prof[somPere]) { trouve=1; } else if (prof[i]<prof[pos]) { trouveMonte(i); } } } } void prop1(int pos) { if (reste>0 and interdit[pos]==0 and rep[pos]==0) { rep[pos]=obj[0].second; reste--; for (int i:adja[pos]) { if (prof[i]<prof[pos]) { prop1(i); } } } } void prop2(int pos) { if (reste>0 and rep[pos]==0) { rep[pos]=obj[1].second; reste--; for (int i:adja[pos]) { prop2(i); } } } vector<int> find_split(int n,int a,int b,int c,vector<int> p,vector<int> q) { nbSom=n; nbAre=p.size(); obj={{a,1},{b,2},{c,3}}; sort(obj.begin(),obj.end()); rep.resize(nbSom); for (int i=0;i<nbAre;i++) { adja[p[i]].push_back(q[i]); adja[q[i]].push_back(p[i]); } somPere=DFS(0); somPere=calcDeb(0); autreCompo=nbSom-prof[somPere]; //cout<<somPere<<endl; for (int i:adja[somPere]) { if (prof[i]<prof[somPere] and autreCompo<obj[0].first) { trouve=0; trouveMonte(i); if (trouve==1) { //cout<<i<<" "; interdit[i]=1; autreCompo+=prof[i]; } } } //cout<<endl; if (autreCompo<obj[0].first) { return rep; } if (autreCompo<obj[1].first) { swap(obj[0],obj[1]); } reste=obj[0].first; prop1(somPere); reste=obj[1].first; prop2(0); for (int i=0;i<nbSom;i++) { if (rep[i]==0) { rep[i]=obj[2].second; } } return rep; }
#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...