답안 #877639

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
877639 2023-11-23T11:41:08 Z huutuan Pastiri (COI20_pastiri) C++14
0 / 100
8 ms 31576 KB
#include<bits/stdc++.h>
#define taskname "sheep"

using namespace std;

const int N=5e5+1;
int n, k, a[N], dep[N], par[N], dist[N], del[N], vis[N];
set<int> g[N];

void bfs(){
   memset(dist, -1, sizeof dist);
   queue<int> q;
   for (int i=1; i<=n; ++i) if (a[i]) q.push(i), dist[i]=0;
   while (q.size()){
      int u=q.front(); q.pop();
      for (int v:g[u]) if (dist[v]==-1){
         dist[v]=dist[u]+1;
         q.push(v);
      }
   }
}

void dfs(int u, int p){
   par[u]=p;
   for (int v:g[u]) if (v!=p){
      dep[v]=dep[u]+1;
      dfs(v, u);
   }
}

void bfs(int root){
   queue<int> q;
   vector<int> vv;
   q.push(root); vis[root]=0;
   vv.push_back(root);
   while (q.size()){
      int u=q.front(); q.pop();
      if (vis[u]==dist[root]) continue;
      for (int v:g[u]) if (!del[v] && vis[v]==-1){
         vis[v]=vis[u]+1;
         q.push(v);
         vv.push_back(v);
      }
   }
   for (int i:vv){
      del[i]=1;
      for (int j:g[i]) g[j].erase(i);
      g[i].clear();
   }
}

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   freopen(taskname".inp", "r", stdin);
   freopen(taskname".out", "w", stdout);
   cin >> n >> k;
   for (int i=1; i<n; ++i){
      int u, v; cin >> u >> v;
      g[u].insert(v);
      g[v].insert(u);
   }
   for (int i=1; i<=k; ++i){
      int x; cin >> x;
      a[x]=1;
   }
   bfs();
   dfs(1, 0);
   memset(vis, -1, sizeof vis);
   vector<int> vv;
   for (int i=1; i<=n; ++i) if (a[i]) vv.push_back(i);
   sort(vv.begin(), vv.end(), [&](int x, int y){
      return dep[x]<dep[y];
   });
   vector<int> ans;
   while (vv.size()){
      int u=vv.back(); vv.pop_back();
      int v=u;
      while (par[v] && dist[par[v]]==dep[u]-dep[par[v]]) v=par[v];
      ans.push_back(v);
      bfs(v);
      while (vv.size() && del[vv.back()]) vv.pop_back();
   }
   cout << ans.size() << '\n';
   for (int i:ans) cout << i << ' ';
   return 0;
}

Compilation message

pastiri.cpp: In function 'int32_t main()':
pastiri.cpp:55:11: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |    freopen(taskname".inp", "r", stdin);
      |    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
pastiri.cpp:56:11: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   56 |    freopen(taskname".out", "w", stdout);
      |    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 31320 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 31324 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 31576 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 31324 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -