| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1043505 | XRomanticCatX | Railway (BOI17_railway) | C++17 | 178 ms | 64960 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define pii pair<int , int>
const int MAXN = 1e5 + 10;
const int maxlg = 30;
int h[MAXN];
vector <int> adj[MAXN];
int stft[MAXN][2];
int biparent[MAXN][maxlg];
map <pii , int> eans;
vector <pii> eorder;
int val[MAXN];
int cnt = 1;
vector <int> ansid;
void dfs(int v , int par){
stft[v][0] = cnt++;
biparent[v][0] = par;
for(int i = 1 ; i < maxlg ; i ++){
biparent[v][i] = biparent[biparent[v][i - 1]][i - 1];
}
for(auto u : adj[v]){
if(u != par){
h[u] = h[v] + 1;
dfs(u , v);
}
}
stft[v][1] = cnt++;
}
int LCA(int a , int b){
if(h[a] < h[b]) swap(a , b);
for(int i = maxlg - 1 ; i >= 0 ; i--){
if(h[biparent[a][i]] >= h[b]) a = biparent[a][i];
}
if(a == b) return a;
for(int i = maxlg - 1 ; i >= 0 ; i--){
if(biparent[a][i] != biparent[b][i]){
a = biparent[a][i] , b = biparent[b][i];
}
}
return biparent[a][0];
}
void Solve(int v, int par){
for(auto u : adj[v]){
if(u != par){
Solve(u , v);
val[v] += val[u];
eans[{u , v}] = val[u];
eans[{v , u}] = val[u];
}
}
}
signed main()
{
int n,m,k;
cin>>n>>m>>k;
for(int i = 1 ; i < n ; i ++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
eorder.push_back({u,v});
}
h[1] = 1;
dfs(1 , 0);
while(m--){
int s;
cin>>s;
vector <int> v;
while(s--){
int x;
cin>>x;
v.push_back(x);
}
sort(v.begin() , v.end() , [] (int x , int y) {return stft[x][0] < stft[y][0];});
int fllca = LCA(v[0] , v[v.size() - 1]);
val[v[0]]++;
val[v[v.size() - 1]]++;
val[fllca] -= 2;
for(int i = 1 ; i < v.size() ;i++){
int lca = LCA(v[i] , v[i - 1]);
val[v[i]]++;
val[v[i - 1]]++;
val[lca] -= 2;
}
}
Solve(1 , 0);
for(int i = 0 ; i < eorder.size() ; i++){
int f = eorder[i].first;
int s = eorder[i].second;
if(eans[{f , s}] >= 2 * k) ansid.push_back(i + 1);
}
cout<<ansid.size()<<endl;
for(auto i : ansid) cout<<i<<" ";
} 컴파일 시 표준 에러 (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... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
