# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1072180 | edogawa_something | The Ties That Guide Us (CEOI23_incursion) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "incursion.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vii;
typedef pair<ll,ll> pii;
#define F first
#define S second
#define all(v) v.begin(),v.end()
#define pb push_back
const ll M=5e5+10;
const ll inf=2e18;
vii adj[M];
bool vis[M];
ll dis[M],pa[M],dep[M];
void mdfs(ll x,ll d=0) {
if(vis[x])
return;
vis[x]=1;
dis[x]=d;
for(auto it:adj[x]) {
if(it==pa[x])
continue;
pa[it]=x;
mdfs(it,d+1);
dep[x]=max(dep[x],dep[it]+1);
}
}
std::vector<int> mark(std::vector<std::pair<int, int>> F, int safe) {
for(int i=0;i<F.size();i++)
adj[F[i].F].pb(F[i].S),adj[F[i].S].pb(F[i].F);
mdfs(safe);
vector<int>res;
for(int i=1;i<=F.size()+1;i++)
res.pb(dis[i]);
return res;
}
void locate(std::vector<std::pair<int, int>> F, int curr, int t) {
for(int i=1;i<F.size()+2;i++)
adj[i].clear();
for(int i=0;i<F.size();i++)
adj[F[i].F].pb(F[i].S),adj[F[i].S].pb(F[i].F);
ll n=F.size()+1;
for(int i=0;i<n;i++)
vis[i+1]=pa[i+1]=dis[i+1]=dep[i+1]=0;
mdfs(curr);
ll lt=t;
for(int i=1;i<=n;i++)
vis[i]=0;
while(t!=0) {
shuffle(all(adj[cur]));
for(auto it:adj[curr]) {
//cout<<curr<<' '<<it<<' '<<dep[it]<<' '<<t<<endl;
if(it==pa[curr]||dep[it]<t-1)
continue;
ll tt=visit(int(it));
if(tt>t)
visit(curr);
else {
t=tt;
curr=it;
break;
}
}
}
}
/*
10 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
*/