CF1338Bエッジの重みの割り当て(思考+ dfs)

この質問の考え方はより独創的で、XORの性質を調べます。

まず、最大のケースを分析します。このケースの分析は、どの2つのパスが同じでなければならないかを検討することです。その場合、1つのケースのみ、つまり、特定のノードの下に複数のリーフノードがあります。これにより、リーフノード間には2つのパスしかありません。 、したがって、これらの2つのパスの値は等しい必要があります。他の場合では、質問の意味を満たすためにランダムに配置できます。これは、任意の重みを選択できるため、構築でき、他のパスの値が異なる可能性があるためです。これはかなり複雑であることがわかりますが、それは明らかに正しいです。

さらに、私たちの分析は最小であり、ここではXORのプロパティを使用する必要があります。XORの性質によれば、すべてのリーフノード間のパスが偶数である場合、同じ値XORの偶数が1 0です

奇数のパスがあると、答えは3になります。つまり、3つの数値1 2 3を入力することで満たすことができます。最初に、2つの数値をすべて満たしてはなりません。次に、123 XORが0であることがわかり、自己解決できます。アレンジ。

多くの質問はより複雑であることがわかりますが、それでも考えるのは直感的です。そのため、多くの人が質問を非常に速く考えています

#include <algorithm> 
#include <iostream> 
#include <cstring> 
#include <cstdlib> 
#include <cstdio> 
#include <cmath> 
#include < string > 
#include <map> 
#include <vector>
 using  namespace std; 
typedef long  long ll;
const  int N = 1e6 + 10 ;
const  int mod = 1e9 + 7 ;
int e [N]、ne [N]、h [N]、idx;
int  in [N];
int p [N];
ボイドadd(int a、int b){ 
    e [idx] = b、ne [idx] = h [a]、h [a] = idx ++ ; 
} 
void dfs(int u、int tmp、int fa){ 
    p [u] = tmp;
    forint i = h [u]; i!=- 1 ; i = ne [i]){
         int j = e [i];
        もし(J == FA)
             続けます
        dfs(j、tmp ^ 1 、u); 
    } 
} 
int main(){
     int n; 
    シン>> n;
    int i; 
    memsetの(H、 - 1はsizeof H)。
    for(i = 1 ; i <n; i ++ ){
         int a、b; 
        scanf(" %d%d "、&​​a、&b); 
        add(a、b); 
        add(b、a); 
        中に [A] ++ ;
        [B] ++ ; 
    } int mi = 1 ;
    int mx = n- 1 ;
    for(i = 1 ; i <= n; i ++ ){
         if
    in [i] == 1 ){ 
            dfs(i、0-1 );
            休憩; 
        } 
    } 
    for(i = 1 ; i <= n; i ++ ){
         ifin [i] == 1 && p [i] == 1 ){ 
            mi = 3 ;
            休憩; 
        } 
    } 
    for(i = 1 ; i <= n; i ++ ){
         int cnt = 0 ;
        forint j = h [i]; j!=-1 ; j = ne [j]){
             int k = e [j];
            ifin [k] == 1 ){ 
                cnt ++ ; 
            } 
        } 
        if(cnt> = 2 ){ 
            mx = mx-cnt + 1 ; 
        } 
    } 
    cout << mi << "  " << mx << endl; 
}
コードを表示

 

おすすめ

転載: www.cnblogs.com/ctyakwf/p/12760359.html