Submission #1143369

#TimeUsernameProblemLanguageResultExecution timeMemory
1143369calisovraduTriumphal arch (POI13_luk)C++20
10 / 100
383 ms19896 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> v; vector<int> depth; int n; bool bfs(int crews){ vector<int> checked(n+1); checked[1]=1; int left = crews,lastday=0; deque<int> q; q.push_back(1); while(!q.empty()){ int nod = q.front(),removed=0; bool found = false; q.pop_front(); for(int i=0;i<v[nod].size();i++){ int newnod = v[nod][i]; if(checked[newnod]==0){ checked[newnod]=1; q.push_back(newnod); removed++; if(depth[newnod]>lastday) found=true; } } if(removed>0){ if(left-removed<0) return false; left-=removed; if(found==true){ lastday++; left+=crews; } } } return true; } int main() { cin>>n; v.resize(n+1); depth.resize(n+1); for(int i=1;i<=n-1;i++){ int a,b; cin>>a>>b; v[a].push_back(b); v[b].push_back(a); } depth[1]=1; queue<int> q; q.push(1); while(!q.empty()){ int nod = q.front(); q.pop(); for(int i=0;i<v[nod].size();i++){ int newnod = v[nod][i]; if(depth[newnod]==0){ depth[newnod]=depth[nod]+1; q.push(newnod); } } } int l=1,r=n,mij,corect=n; while(l<=r){ mij=(l+r)/2; bool res = bfs(mij); if(res==true){ corect=min(mij,corect); r=mij-1; }else l=mij+1; } cout<<corect; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...