Submission #1284428

#TimeUsernameProblemLanguageResultExecution timeMemory
1284428Faisal_SaqibThe Ties That Guide Us (CEOI23_incursion)C++20
9 / 100
2049 ms5008 KiB
#include <vector> #include "incursion.h" #include <cstdio> #include <bits/stdc++.h> using namespace std; const int N=46000; vector<int> ma[N]; int dist[N]; void dfs(int x,int p=-1,int h=0) { dist[x]=h; for(auto y:ma[x]) { if(y!=p) { dfs(y,x,h+1); } } } std::vector<int> mark(std::vector<std::pair<int, int>> F, int safe) { int n=F.size()+1; for(int i=0;i<=n;i++) { ma[i].clear(); } for(int i=0;i<n-1;i++) { ma[F[i].first].push_back(F[i].second); ma[F[i].second].push_back(F[i].first); } dfs(safe); vector<int> dp(n); for(int i=1;i<=n;i++)dp[i-1]=dist[i]; return dp; } void locate(std::vector<std::pair<int, int>> F, int curr, int t) { int n=F.size()+1; for(int i=0;i<=n;i++) { ma[i].clear(); } for(int i=0;i<n-1;i++) { ma[F[i].first].push_back(F[i].second); ma[F[i].second].push_back(F[i].first); } int par=-1; while(t!=0) { int pt=t,pc=curr;; if(ma[curr].size()==1) { curr=ma[curr][0]; t=visit(curr); par=pc; continue; } if(ma[curr].size()==2) { if(ma[curr][0]==par) { curr=ma[curr][1]; // directly go to the other one t=visit(curr); } else if(ma[curr][1]==par){ curr=ma[curr][0]; // directly go to the other one t=visit(curr); } else{ curr=ma[curr][1]; // directly go to the other one t=visit(curr); if(t>pt) // moving away from safe { visit(pc); t=visit(ma[pc][0]); curr=ma[pc][0]; } } par=pc; continue; } } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...