Advertisement

EdgeWeightAssignment

阅读量:

编程竞赛题目解析

题解:
通过观察样例推测结论。
关于最小值的探讨:起初未注意到数值必须大于0,因此误以为仅需两个数即可满足条件。然而由于数值必须大于0,因此所使用的数可能为1或3个。当使用1个数时,所有叶子节点的度数奇偶性必须一致;若不一致,则需要使用3个数,并在最后一条边填充与前面异或值相同的数值。
关于最大值的探讨:首先存在一个限制条件,即若两个叶子节点具有相同的祖先,则它们对应的边权值必须相同。此外,在n个节点构成的树中,共有n-1条边,在无额外限制的情况下,可填充的权值种类数量为n-1种。

复制代码
    #include<bits/stdc++.h>
    const int N=1e5+10;
    using namespace std;
    vector<int> g[N];
    int dp=-1,flag1=0;
    map<int,int> mp;
    int ind[N];
    void dfs(int u,int dep,int fa)
    {
    for(int i=0;i<g[u].size();i++){
        int j=g[u][i];
        if(j==fa) continue;
        dfs(j,dep+1,u);
    }
    if(g[u].

全部评论 (0)

还没有任何评论哟~