比赛 2026.9.5 评测结果 AAAAAAAWWWWWWWWWWWWWWWWWW
题目名称 Tree Decorations 最终得分 28
用户昵称 PXCZM 运行时间 3.141 s
代码语言 C++ 内存使用 21.14 MiB
提交时间 2026-09-05 11:46:55
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mul=599,mod=1e9+9;
int n,m;
vector<int>G[500010];
ll val[500010];
int siz[500010];
void dfs(int rt,int fa)
{
    siz[rt]=1;
    vector<ll>s;
    for(int to:G[rt])
    {
        if(to==fa) continue;
        dfs(to,rt);
        s.push_back(val[to]);
        siz[rt]+=siz[to];
    }
    sort(s.begin(),s.end());
    val[rt]=131;
    for(auto x:s) val[rt]=(val[rt]*mul+x)%mod;
}
int root;
multiset<int>st;
bool check(int rt,int fa)
{
    for(int to:G[rt])
    {
        if(to==fa) continue;
        if(!st.size()) return false;
        auto it=st.lower_bound(val[to]);
        if(it==st.end()) return false;
        if(*it!=val[to]) return false;
        st.erase(it);
        if(!check(to,rt)) return false;
    }
    return true;
}
void solve1()
{
    dfs(1,0);
    for(int son:G[1])
        if(siz[son]>siz[root])
            root=son;
    for(int son:G[1])
        if(son!=root)
            st.insert(val[son]);
    if(check(root,1)&&st.empty()) cout<<1<<'\n';
    else cout<<0<<'\n';
}
int main()
{
    freopen("Decorations.in","r",stdin);
    freopen("Decorations.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<n;i++)
    {
        int u,v; cin>>u>>v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    if(m==1)
    {
        solve1();
        return 0;
    }
    return 0;
}