AGC 016 F - Games on DAG(状压dp)

AGC 016 F - Games on DAG(状压dp)

题意

给你一个有 n 个点 m 条边 DAG 图,点的标号和拓扑序一致。

现在有两个人进行博弈,有两个棋子分别在 1,2 号点上,需要不断移动到它指向的点上。

如果当前两个点都无法移动,那么就视为当前操作的人失败。

问有多少边集满足先手必胜。

\displaystyle 2 \le n \le 15, m \le \frac{n \times (n+1)}{2}

 

这是一道思维非常困难的状压题

我们考虑转化问题,两个棋子是独立的,那么我们如果求出了这两个棋子的SG值

最后就是求两个棋子SG值不相同的方案数

我们考虑补集转化,现在要求两个棋子SG值相同的方案数

dp[s]表示选的点的状态为s时,总共的方案数

我们要让1,2个点sg为0,所以要么一起选1,2,要么一起不选

然后我们可以枚举子集ss,子集的sg全为0,x^ss全部不为0

那么把x^ss全都连到ss上面,他们的sg函数全部加1

这样无论何时1,2两个点就都是sg函数相同的了

最后dp[(1<<n)]就是答案了

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int n,m,shu1,shu2,point[1000005],dp[1000005];
int ans,num[1000005];
int moc(int x)
{
	if(x>=mod) return x-mod;
	if(x<0) return x+mod;
	return x;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&shu1,&shu2);
		shu1--,shu2--;
		point[shu1]|=1<<shu2;
	}
	int maxa=(1<<n)-1;
	dp[0]=1;
	for(int i=0;i<=maxa;i++)
	{
		int now=0;
		for(int j=0;j<n;j++)
		if(i>>j&1) now++;
		num[i]=1<<now;
	}
	for(int s=1;s<=maxa;s++)
	if((s&1)==(s>>1&1))
	{
		for(int ss=s;ss;ss=(ss-1)&s)
		if((ss&1)==(ss>>1&1))
		{
			int t=s^ss,now=1;
			for(int i=0;i<n;i++)
			if(ss>>i&1)
			now=1ll*now*num[point[i]&t]%mod;
			else if(t>>i&1)now=1ll*now*(num[point[i]&ss]-1)%mod;
			dp[s]=moc(dp[s]+1ll*now*dp[t]%mod);
		}
	}
	ans=1;
	for(int i=1;i<=m;i++)
	ans=moc(ans<<1);
	ans=moc(ans-dp[maxa]);
	printf("%d",ans);
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gradient-based neural dag learning(梯度优化的神经有向无环图学习)是一种用于构建和训练神经网络结构的方法。它通过学习网络的拓扑结构,即神经网络的连接方式和层次结构,来优化网络性能。 传统的神经网络结构通常是由人工设计的,而在gradient-based neural dag learning中,网络的结构可以通过梯度下降算法进行优化。该方法的核心思想是在训练过程中不仅学习网络的权重参数,还学习网络的拓扑结构。 在gradient-based neural dag learning中,网络的结构可以表示为有向无环图(DAG),图中的节点表示网络中的层或操作,边表示连接。我们可以用一组变量来表示每个节点的状态和连接关系,通过优化这些变量,实现网络结构的优化。 具体地,gradient-based neural dag learning通过计算网络中每个操作或层对目标函数的梯度来优化变量。在梯度下降的过程中,网络的结构随着反向传播算法的迭代而逐渐优化。这种方法可以使得网络自动完成结构的搜索和选择,提高了网络的表达能力和性能。 由于gradient-based neural dag learning可以自动进行网络结构的学习和优化,它可以减轻人工设计网络结构的负担,并且在处理复杂任务时能够获得更好的性能。然而,由于网络结构的搜索空间非常大,优化过程可能会很复杂,需要大量的计算资源和时间。 总之,gradient-based neural dag learning是一种通过梯度下降优化网络结构的方法,能够自动学习和优化神经网络的拓扑结构,提高网络性能。这种方法在深度学习领域有着广泛的应用潜力,并且为网络的设计和训练带来了新的思路和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值