# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
227198 | MKopchev | Mergers (JOI19_mergers) | C++14 | 75 ms | 18960 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int nmax=5e5+42;
int n,k;
int colour[nmax],cnt[nmax];
vector<int> adj[nmax];
int wrong=0;
int seen[nmax];
void add(int val)
{
val=colour[val];
if(seen[val]==0)wrong++;
seen[val]++;
if(seen[val]==cnt[val])wrong--;
}
void sub(int val)
{
val=colour[val];
if(seen[val]==cnt[val])wrong++;
seen[val]--;
if(seen[val]==0)wrong--;
}
int SZ[nmax];
void dfs_sz(int node,int par)
{
SZ[node]=1;
for(auto k:adj[node])
if(k!=par)
{
dfs_sz(k,node);
SZ[node]+=SZ[k];
}
}
int can_divide=0;
void dfs_clean(int node,int par)
{
sub(node);
for(auto k:adj[node])
if(k!=par)
{
dfs_clean(k,node);
}
}
void dfs_add(int node,int par)
{
add(node);
for(auto k:adj[node])
if(k!=par)
{
dfs_add(k,node);
}
}
int dfs(int node,int par)
{
bool found=0;
int big=0;
for(auto k:adj[node])
if(k!=par&&SZ[big]<SZ[k])big=k;
for(auto k:adj[node])
if(k!=par&&big!=k)
{
found=dfs(k,node)|found;
dfs_clean(k,node);
}
/*
cout<<node<<" -> "<<big<<" "<<found<<" "<<wrong<<endl;
cout<<"seen(should be empty): ";for(int i=1;i<=k;i++)cout<<seen[i]<<" ";cout<<endl;
*/
if(big)found=found|dfs(big,node);
for(auto k:adj[node])
if(k!=par&&big!=k)
dfs_add(k,node);
add(node);
//cout<<node<<" -> "<<big<<" "<<found<<" "<<wrong<<endl;
//cout<<"seen: ";for(int i=1;i<=k;i++)cout<<seen[i]<<" ";cout<<endl;
if(wrong==0&&found==0&&node!=1)
{
found=1;
can_divide++;
}
return found;
}
int main()
{
scanf("%i%i",&n,&k);
int u,v;
for(int i=1;i<n;i++)
{
scanf("%i%i",&u,&v);
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i=1;i<=n;i++)
{
scanf("%i",&colour[i]);
cnt[colour[i]]++;
}
dfs_sz(1,0);
dfs(1,0);
printf("%i\n",(can_divide+1)/2);
return 0;
}
컴파일 시 표준 에러 (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... |