zoukankan      html  css  js  c++  java
  • [CF852E]Casinos and travel(2019-11-15考试)

    题目大意

    有一棵(n)个点的树,令(f(u))表示给树黑白染色,满足以(u)为根的树中,每个叶子节点到根的路径上黑点数量为偶数的染色方案数,求(sumlimits_{u=1}^n f(u))

    题解

    可以发现,确定了非叶子节点后,可以通过调整叶子的颜色使得每种方案均成立。令(leaf)为叶子的个数,答案为(2^{n-leaf}(n+leaf))

    当然也可以通过树形(mathrm{dp})来解决,不过这样比较麻烦

    卡点

    快速幂写挂((mathrm{CSP})前我写挂快速幂也是毒瘤)

    C++ Code:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #define mul(a, b) (static_cast<long long> (a) * (b) % mod)
    #define _mul(a, b) (a = static_cast<long long> (a) * (b) % mod)
    const int maxn = 1e5 + 10, mod = 1e9 + 7;
    int n, ans, deg[maxn], num;
    
    inline int pw(int b, int p) {
    	int r = 1;
    	for (; p; p >>= 1, _mul(b, b)) if (p & 1) _mul(r, b);
    	return r;
    }
    int main() {
    	std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
    	std::cin >> n;
    	if (n == 1) return std::cout << "1
    ", 0;
    	for (int i = 1, a, b; i < n; ++i)
    		std::cin >> a >> b, ++deg[a], ++deg[b];
    	for (int i = 1; i <= n; ++i) num += deg[i] == 1;
    	std::cout << mul(n + num, pw(2, n - num)) << '
    ';
    	return 0;
    }
    
    
  • 相关阅读:
    Java 基础知识总结
    AppScan-文件参数Shell命令注入
    AndroidKiller-下载使用
    代码技巧之常用快捷键的整理
    z-index的特点
    定位元素的异同点
    定位之固定定位
    定位之相对定位
    clear的值和特点及伪元素before和after的使用
    如何让元素消失在我们的视野中(面试题)
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/11864361.html
Copyright © 2011-2022 走看看