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

P4084 [USACO17DEC]Barn Painting G

时间:2022-10-01 10:00:20浏览次数:53  
标签:ll USACO17DEC long vis 100001 P4084 Painting DP

#include<bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
class DP_on_tree{
public:
	#define ll long long
	ll n,k;
	ll free[100001];
	ll    f[100001][4];
	ll  vis[100001];
	vector < ll > e[100001];
	void DP(ll x,ll fa)
	{
		if(vis[x]==1) return;
		else          vis[x]=1;
		for(ll i=1; i<=3; i++)
		{
			if(free[x]!=0&&free[x]!=i){f[x][i]=0;continue;}
			f[x][i]=1;
			for(ll j=0; j<e[x].size(); j++)
			{
				ll y=e[x][j],res=0;
				if(y==fa)continue;
				DP(y,x);
				for(ll k=1; k<=3; k++)
				{
					if(free[y]!=0&&free[y]!=k)continue;
					if(k==i)continue;
					res+=f[y][k];
					res%=mod;
				}
				f[x][i]*=res;
				f[x][i]%=mod;
			}
		}
	}
	void Main()
	{
		scanf("%lld%lld",&n,&k);
		for(ll i=1,x,y; i<n; i++)
		{
			scanf("%lld%lld",&x,&y);
			e[x].push_back(y);
			e[y].push_back(x);
			vis[i]=0;
		}
		vis[n]=0;
		for(ll i=1,b,co; i<=k; i++)
		{
			scanf("%lld%lld",&b,&co);
			free[b]=co;
		}
		DP(1,0);
		printf("%lld\n",(f[1][1]+f[1][2]+f[1][3])%mod);
	}
}x;
int main()
{
	x.Main();
}

标签:ll,USACO17DEC,long,vis,100001,P4084,Painting,DP
From: https://www.cnblogs.com/dadidididi/p/16746830.html

相关文章

  • Lyk Love painting
    LykLovepainting一道超出常规的动态规划题干【题目描述】lyk有一块神奇的画布,呈2*n的格子状。lyk现在想在画布上画m幅画,每幅画必须是矩形。为了充分利用画布,画布上的......
  • CF1720E Misha and Paintings 题解
    神仙2700。首先统计出原数组中不同元素个数记作\(cnt\),如果\(cnt\lek\)说明元素个数不够,由于一次只能加一个颜色因此答案就是\(k-cnt\)。然后接下来要证明一个结论......
  • Painting Game (博弈论)
    题目:  VirtualJudge(vjudge.net)题目大意:2个人轮流对长条方格填黑,黑的地方不能够相邻.一个人要尽量填黑,一个人要尽量不填黑,当不能填的时候就结束题解思路:......
  • CF1720E. Misha and Paintings
    题意给出n*n的矩阵,ai,j∈[1,n*n],现在要矩形覆盖若干次,每次把一个正方形的ai,j改为x,求最少的次数使得最后有k种不同的数n<=500题解设sum为初始不同的数,若sum<k则显然只......
  • Codeforces Round #815 (Div. 2) E. Misha and Paintings
    人生中第一个AC的codeforces题,大概太难了,光是看答案就看了整整一下午,最后还是在b站上搜到讲解视频才明白的。俺们阿B真的是太厉害啦这道题首先容易看出当矩阵中数字个数......
  • [题解] Codeforces 1720 E Misha and Paintings 结论
    算是诈骗题?令一开始就存在的颜色数为cnt。k>=cnt的情况,显然每次找一个出现不止一次的颜色,然后把这个颜色的恰好一个方块替换成一种没有出现过的颜色就可以了,\(k-cnt\)次解......
  • CF576E Painting Edges
    传送门类比一下模板题,其实我们只需要把扩展域并查集再扩展成\(k\)个即可但有个问题,当改变一条边的颜色,导致不能构成二分图时,我们就不能操作;但在线段树上,我们的操作不......