Edge Weight Assignment

Posted cadcadcad

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Edge Weight Assignment相关的知识,希望对你有一定的参考价值。

D - Edge Weight Assignment

参考:Codeforces Round #633 Editorial

感觉这个题关键之处在于,要会将图化为一棵树,这样逻辑会清晰很多。

如果叶子之间距离存在有奇数(非1),那么最小的 f 值一定为3,否则为1。可以通过求解其他叶子节点到某一个叶子节点的距离得出,得出的结论对任何一个节点都成立(即如果该节点满足,那么其他节点也满足)。

另一个很重要的结论就是如果存在一个父节点连接两个叶子节点的情况的话,那么 f 的最大值需要减1,因为叶子节点的值已确定,不可能再有别的变化。

// Created by CAD on 2020/4/13.
#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
vector<int> e[maxn];
bool bj=0;
void dfs(int u,int fa=0,int x=0){
    for(auto i:e[u])
        if(i!=fa) dfs(i,u,x^1);
    if(e[u].size()==1&&x) bj=1;
}
int vis[maxn];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
//    FOPEN;
    int n;cin>>n;
    for(int i=1,x,y;i<=n-1;++i)
        cin>>x>>y,e[x].push_back(y),e[y].push_back(x);
    for(int i=1;i<=n;++i)
        if(e[i].size()==1){
            dfs(i);break;
        }
    int ans=n-1;
    for(int i=1;i<=n;++i)
        if(e[i].size()==1)
            ans-=vis[e[i][0]],vis[e[i][0]]=1;
    cout<<(bj?3:1)<<" "<<ans<<"
";
    return 0;
}

以上是关于Edge Weight Assignment的主要内容,如果未能解决你的问题,请参考以下文章

1338B - Edge Weight Assignment

Codeforces 1339D - Edge Weight Assignment (数据结构 - 树)

Codeforces827D. Best Edge Weight

CSC72003 Assignment

CS231n assignment3 Q4 Style Transfer

「CF827D Best Edge Weight」 - LCT