首页 > 其他分享 >P4084 [USACO17DEC] Barn Painting G

P4084 [USACO17DEC] Barn Painting G

时间:2024-02-15 22:24:16浏览次数:33  
标签:read ll USACO17DEC next P4084 节点 now Painting sum

原题链接

题解

1.对于没有固定颜色的节点来说,每个节点只会有三种颜色,而这又是一棵树,树形dp由此而来
2.由相邻节点不同确定转移方程
3.即使有求模也可能要开long long

code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod = 1e9 + 7;
vector<ll> G[100005];
vector<ll> color(100005, 0);

inline void read(ll &x) {  
    x = 0;
    ll flag = 1;
    char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-') flag = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9') {
        x = (x << 3) + (x << 1) + (c ^ 48); 
        c = getchar();
    }
    x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9) 
        write(x / 10);
    putchar(x % 10 + '0');
}

void add(ll x, ll y)
{
    G[x].push_back(y);
    G[y].push_back(x);
}

vector<vector<ll>> sum(100005, vector<ll>(4, 0));//代表以当前节点为根节点且颜色为1/2/3的方案数

void ss(ll now, ll fa) //求出以now为根节点的树的方案数
{
    for(ll i = 0; i < G[now].size(); i++)
    {
        ll next = G[now][i];

        if(next == fa) continue;
        ss(next, now);
        
            sum[now][1] = sum[now][1] * (sum[next][2] + sum[next][3]) % mod;//当前节点的方案数等于子节点的方案数乘积
            sum[now][2] = sum[now][2] * (sum[next][1] + sum[next][3]) % mod;//对于有固定颜色的点而言,其他颜色的初始值为零
            sum[now][3] = sum[now][3] * (sum[next][2] + sum[next][1]) % mod;
  
    }
}

int main()
{
    ll n, k;
    read(n); read(k);

    for(ll i = 1; i < n; i++)
    {
        ll x, y;
        read(x); read(y);
        add(x, y);
    }

    for(ll i = 1; i <= k; i++)
    {
        ll x;
        read(x); read(color[x]);
    }

    for(ll i = 1; i <= n; i++)
    {
        if(!color[i])
            for(ll j = 1; j <= 3; j++) sum[i][j] = 1;
        else sum[i][color[i]] = 1;//初始化
    }
    ss(1, 0);

    write(((sum[1][1] + sum[1][2]) % mod + sum[1][3]) % mod);
    return 0;
}

标签:read,ll,USACO17DEC,next,P4084,节点,now,Painting,sum
From: https://www.cnblogs.com/pure4knowledge/p/18016686

相关文章

  • P4090 [USACO17DEC] Greedy Gift Takers P
    原题链接题解1.如果前\(7\)头牛能全部能拿到礼物,但是这前\(7\)头牛里有\(4\)头牛更新在前\(4\)的位置,请问第\(8\)头牛能否得到礼物?答案是不行,因为前\(4\)头牛会在前\(4\)的位置形成循环2.假如恰好第\(x\)头牛没有礼物,那么牛\(x\)之后的牛都得不到礼物,因为不......
  • [USACO17DEC] Greedy Gift Takers
    原题链接首先这道题的数据量1e5那么时间复杂度要保持在O(nlogn)内。先判断单调性,若k头牛拿不到礼物,那么k-1头牛也拿不到礼物,所有这题可以用二分法来做(11110000)。二分部分省略,我们直接来分析check部分(如下)。boolcheck(intk){for(inti=1;i<=n-k+1;i++)b[i]=a[i];s......
  • AP4084 耐压24V的锂电池线性充电管理芯片
         AP4084是一款耐压24V的单节锂离子电池恒压恒流充电管理理芯片,充电电流可达600ma(SOT23-5,FBP2*2-6L,800ma(DFN2*2-8L),1A(ESOP8).由于线性充电器在输入和输出大压差情况下会严重发热,其内部有热反馈电路可以对在充电过程中对芯片温度加以控制,将充电电流调节到较低水平,以适......
  • AP4084 耐压24V的锂电池线性充电管理芯片
         AP4084是一款耐压24V的单节锂离子电池恒压恒流充电管理理芯片,充电电流可达600ma(SOT23-5,FBP2*2-6L,800ma(DFN2*2-8L),1A(ESOP8).由于线性充电器在输入和输出大压差情况下会严重发热,其内部有热反馈电路可以对在充电过程中对芯片温度加以控制,将充电电流调节到较低水平,以适......
  • RandomPaintingOnABoard TopCoder - 12607
    AnoteabouttheconstraintsConstraintsindicateusthatthemaximumwidthandheightwillbe21.Thereisanotherconstraintthough:Themaximumtotalnumberofcellsis150.Thiscanhelpusbecauseitmeansthatthesmallerdimensionwillbeatmost1......
  • [CF576E] Painting Edges
    PaintingEdges动态加边和二分图容易想线段树分治,分别维护k种颜色的并查集。不过每条边的存在时间不能确定。设边i的两次操作的时间为\(x_i,y_i\),那么对于\(t\in[x_i+1,y_i-1]\)有两种情况,颜色改变或改色不变。则我们把每次操作影响的时间放在树上,从左到右递归到叶......
  • CF1479B1 Painting the Array I
    如果两种方案末尾两数有一数相同,那么答案较大的方案不劣于答案较小的方案。答案较大的方案只需\textbf{模仿}答案较小的方案即可,在状态变成相同之前答案最多只会少\(1\)。所以只需要考虑末尾两数\(a,b\)与新进来的数\(c\)各不相同时该替换哪个。假设\(a\)下次出现的位置......
  • Educational Codeforces Round 152 (Div. 2) D. Array Painting(双指针)
    EducationalCodeforcesRound152(Div.2)D.ArrayPainting//思路:双指针找连续正数段//若段中出现2,则更新两头的0的情况,若为涂色则改为true//若无2,则优先更新左侧0,若左0已经为true,则更新右侧0//数组开头结尾特判#defineintlonglong#defineldlongdoubleusingnam......
  • Lnton羚通算法算力云平台在OpenCV-Python中如何图像修复 Image Inpainting
    OpenCVPython图像修复【理论】大多数人家里都会有一些旧照片,上面有一些黑点,一些笔画等。你想过把它修复回来吗?我们不能简单地在油漆工具中删除它们,因为它只会用白色结构取代黑色结构,这是没有用的。在这些情况下,使用一种称为图像修补的技术。基本的想法很简单:用邻近的像素替换......
  • CFgym103260K-Rectangle Painting
    前言断续地调了一天一夜,终于做出来了!题目链接-RectanglePainting大概就是:给\(n\)个集合\(S_i\),两种操作,1{[l,r],x}lr向\(S_l\)到\(S_r\)插入\(x\)2lr询问\(\max\limits_{i=l}^r\{\text{mex}(S_i)\}\)。但是强制在线!\(1\len,l,r\le2\times10^5,1\le......