zoukankan      html  css  js  c++  java
  • 牛客 树(dfs序)

    这题的思路很精妙,因为我们发现每个点有两种选择,一种是涂新的颜色,一种是涂原来出现的颜色

    如果按树形dp的方法做,很难做,因为无法判断点之间的路径以及存在的颜色关系。因此想到使用dfs序的方式,转化成链式

    这样该节点涂色之前父亲节点也被涂色。而新颜色可以随便选,原来的颜色必须和父亲节点的颜色一样

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=3e5+10;
    const int mod=1e9+7;
    ll f[330][330];
    int main(){
        int i;
        int n,k;
        cin>>n>>k;
        for(i=1;i<n;i++){
            int x,y;
            cin>>x>>y;
        }
        f[0][0]=1;
        for(i=1;i<=n;i++){
            for(int j=1;j<=k;j++){
                f[i][j]=(f[i-1][j]+f[i-1][j-1]*(k-j+1))%mod;
            }
        }
        ll ans=0;
        for(i=1;i<=k;i++){
            ans=(ans+f[n][i])%mod;
        }
        cout<<ans<<endl;
        return 0;
    }
    View Code
  • 相关阅读:
    [设计模式]之依赖倒置
    CSS的三种使用方式
    CSS的语法结构
    学习 jQueryMobile 第一个程序
    初识 GoogleMap
    程序员考试
    程序员考试
    CSS学习
    认识CSS
    开始忙一段时间
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12863491.html
Copyright © 2011-2022 走看看