int par[100005];
int find_par(int u) {
if(par[u] < 0) return u;
par[u] = find_par(par[u]);
return par[u];
}
bool merge(int u, int v) {
u = find_par(u), v = find_par(v);
if(u == v) return false;
if(par[u] > par[v]) swap(u, v);
par[u] += par[v];
par[v] = u;
return true;
}
set<int> g[100005];
vector<int> recoverDeadPods(int n, vector<vector<int>> connections, vector<vector<int>> queries) {
int p = 0;
for(auto x : connections) {
p = max(p, x[0]);
p = max(p, x[1]);
}
for(auto x : queries) {
p = max(p, x[0]);
p = max(p, x[1]);
}
for(int i = 1; i <= p; i++) par[i] = -1;
for(auto x : connections) {
merge(x[0], x[1]);
}
for(int i = 1; i <= p; i++) {
int u = find_par(i);
g[u].insert(i);
}
vector<int> ans;
for(auto x : queries) {
if(x[0] == 1) {
int u = find_par(x[1]);
if(g[u].empty()) ans.push_back(-1);
else {
auto iter = g[u].find(x[1]);
if(iter != g[u].end()) ans.push_back(x[1]);
else ans.push_back(*g[u].begin());
}
} else {
int u = find_par(x[1]);
auto iter = g[u].find(x[1]);
if(iter != g[u].end()) g[u].erase(iter);
}
}
return ans;
}
Pods Cisco โ
int find_par(int u) {
if(par[u] < 0) return u;
par[u] = find_par(par[u]);
return par[u];
}
bool merge(int u, int v) {
u = find_par(u), v = find_par(v);
if(u == v) return false;
if(par[u] > par[v]) swap(u, v);
par[u] += par[v];
par[v] = u;
return true;
}
set<int> g[100005];
vector<int> recoverDeadPods(int n, vector<vector<int>> connections, vector<vector<int>> queries) {
int p = 0;
for(auto x : connections) {
p = max(p, x[0]);
p = max(p, x[1]);
}
for(auto x : queries) {
p = max(p, x[0]);
p = max(p, x[1]);
}
for(int i = 1; i <= p; i++) par[i] = -1;
for(auto x : connections) {
merge(x[0], x[1]);
}
for(int i = 1; i <= p; i++) {
int u = find_par(i);
g[u].insert(i);
}
vector<int> ans;
for(auto x : queries) {
if(x[0] == 1) {
int u = find_par(x[1]);
if(g[u].empty()) ans.push_back(-1);
else {
auto iter = g[u].find(x[1]);
if(iter != g[u].end()) ans.push_back(x[1]);
else ans.push_back(*g[u].begin());
}
} else {
int u = find_par(x[1]);
auto iter = g[u].find(x[1]);
if(iter != g[u].end()) g[u].erase(iter);
}
}
return ans;
}
Pods Cisco โ
def getMinTime(n, cache):
# Write your code here
def solve(mid):
h = {}
for i in cache:
h[i] = 1+h.get(i,0)
extrawork = 0
cnt = 0
for i in range(1,n+1):
if h.get(i,0) > mid:
extrawork += h[i]-mid
else:
cnt += (mid-h.get(i,0))//2
return cnt>=extrawork
l,r = 1, 2*len(cache)
while l<=r:
mid = (l+r)//2
if solve(mid):
ans = mid
r = mid-1
else:
l = mid+1
return ans
l,r = 1, len(cache)
while l<=r:
mid = (l+r)//2
if solve(mid):
ans = mid
r = mid-1
else:
l = mid+1
return ans
Min time
Cisco โ
# Write your code here
def solve(mid):
h = {}
for i in cache:
h[i] = 1+h.get(i,0)
extrawork = 0
cnt = 0
for i in range(1,n+1):
if h.get(i,0) > mid:
extrawork += h[i]-mid
else:
cnt += (mid-h.get(i,0))//2
return cnt>=extrawork
l,r = 1, 2*len(cache)
while l<=r:
mid = (l+r)//2
if solve(mid):
ans = mid
r = mid-1
else:
l = mid+1
return ans
l,r = 1, len(cache)
while l<=r:
mid = (l+r)//2
if solve(mid):
ans = mid
r = mid-1
else:
l = mid+1
return ans
Min time
Cisco โ