제출 #133232

#제출 시각아이디문제언어결과실행 시간메모리
133232ekremMergers (JOI19_mergers)C++98
0 / 100
214 ms111628 KiB
#include <bits/stdc++.h> #define st first #define nd second #define mp make_pair #define pb push_back #define sol (k+k) #define sag (k+k+1) #define orta ((bas+son)/2) #define coc g[node][i] #define LOGN 20 #define mod 1000000007 #define inf 1000000009 #define N 1000005 using namespace std; typedef long long ll; typedef pair < int , int > ii; int n, k, ans, l[N], a[N], der[N], par[LOGN + 5][N]; vector < int > g[N], cik[N]; set < int > s[N]; set < int > :: iterator it; void hazirla(int node, int pr, int dr){ der[node] = dr; par[0][node] = pr; for(int i = 0; i < g[node].size(); i++) if(coc != pr) hazirla(coc, node, dr + 1); } int lca(int u, int v){ if(!u or !v) return u + v; if(der[u] < der[v]) swap(u, v); for(int i = LOGN; i >= 0; i--) if(der[par[i][u]] >= der[v]) u = par[i][u]; if(u == v) return u; for(int i = LOGN; i >= 0; i--) if(par[i][u] != par[i][v]){ u = par[i][u]; v = par[i][v]; } return par[0][u]; } bool dfs(int node, int par){ bool don = 0; for(int i = 0; i < g[node].size(); i++) if(coc != par){ don |= dfs(coc, node); if(s[coc].size() > s[node].size()) swap(s[node], s[coc]); for(it = s[coc].begin(); it != s[coc].end(); it++) s[node].insert(*it); } // cout << node << " " << don << endl; s[node].insert(a[node]); for(int i = 0; i < cik[node].size(); i++) s[node].erase(cik[node][i]); if(!don and s[node].empty() and par){ // cout << node << endl; don = 1; ans++; } return don; } int main() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); scanf("%d %d",&n ,&k); for(int i = 1; i < n; i++){ int u, v; scanf("%d %d",&u ,&v); g[v].pb(u); g[u].pb(v); } hazirla(1, 0, 1); for(int i = 1; i <= LOGN; i++) for(int j = 1; j <= n; j++) par[i][j] = par[i - 1][par[i - 1][j]]; for(int i = 1; i <= n; i++){ scanf("%d",a + i); l[a[i]] = lca(l[a[i]], i); } for(int i = 1; i <= k; i++) cik[l[i]].pb(i); dfs(1, 0); printf("%d",ans/2 + ans%2); // cout << ans << endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

mergers.cpp: In function 'void hazirla(int, int, int)':
mergers.cpp:27:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < g[node].size(); i++)
                 ~~^~~~~~~~~~~~~~~~
mergers.cpp: In function 'bool dfs(int, int)':
mergers.cpp:52:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < g[node].size(); i++)
                 ~~^~~~~~~~~~~~~~~~
mergers.cpp:62:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < cik[node].size(); i++)
                 ~~^~~~~~~~~~~~~~~~~~
mergers.cpp: In function 'int main()':
mergers.cpp:75:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&n ,&k);
  ~~~~~^~~~~~~~~~~~~~~~
mergers.cpp:78:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d",&u ,&v);
   ~~~~~^~~~~~~~~~~~~~~~
mergers.cpp:88:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",a + i);
   ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...