| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 152071 | oolimry | Split the Attractions (IOI19_split) | C++14 | 132 ms | 14324 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 <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
typedef pair<int,int> ii;
vi adj[100005];
int dp[100005];
bool vis[100005];
void dfs(int u){
vis[u] = true;
for(int i = 0;i < adj[u].size();i++){
int v = adj[u][i];
if(!vis[v]){
dfs(v);
dp[u] += dp[v];
}
}
dp[u] += 1;
}
vi find_split(int n, int aaa, int bbb, int ccc, vi p, vi q) {
for(int i = 0;i < p.size();i++){
int x = p[i];
int y = q[i];
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs(0);
vector<pair<int,int> > vv;
vv.push_back(ii(aaa,1));
vv.push_back(ii(bbb,2));
vv.push_back(ii(ccc,3));
sort(vv.begin(),vv.end());
int a = vv[0].first;
int b = vv[1].first;
for(int i = 0;i < p.size();i++){
int x = p[i];
int y = q[i];
int l, r;
int xx, yy;
if(dp[y] > dp[x]){
if(dp[0] - dp[x] > dp[x]){
l = dp[x];
r = dp[0] - dp[x];
xx = x; yy = y;
}
else{
r = dp[x];
l = dp[0] - dp[x];
xx = y; yy = x;
}
}
else{
if(dp[0] - dp[y] > dp[y]){
l = dp[y];
r = dp[0] - dp[y];
xx = y; yy = x;
}
else{
r = dp[y];
l = dp[0] - dp[y];
xx = x; yy = y;
}
}
if(l >= a && r >= b){
queue<int> bfs;
//cout << ll << " " << rr << "\n";
vi vis;
for(int i = 0;i < n;i++) vis.push_back(vv[2].second);
//vis[x] = vv[0].second;
//vis[y] = vv[1].second;
bfs.push(xx);
int cnt = a;
while(!bfs.empty()){
int u = bfs.front();
bfs.pop();
if(vis[u] != vv[2].second) continue;
vis[u] = vv[0].second;
cnt--;
if(cnt == 0) break;
for(int j = 0;j < adj[u].size();j++){
int v = adj[u][j];
if(v == x || v == y) continue;
bfs.push(v);
}
}
while(!bfs.empty()) bfs.pop();
bfs.push(yy);
cnt = b;
while(!bfs.empty()){
int u = bfs.front();
bfs.pop();
if(vis[u] != vv[2].second) continue;
vis[u] = vv[1].second;
cnt--;
if(cnt == 0) break;
for(int j = 0;j < adj[u].size();j++){
int v = adj[u][j];
if(v == x || v == y) continue;
bfs.push(v);
}
}
return vis;
}
}
vi none;
for(int i = 0;i < n;i++) none.push_back(0);
return none;
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
