比赛 Asm_Def战记之透明计算网络 评测结果 AAAAAAAWWW
题目名称 Asm_Def三角形 最终得分 70
用户昵称 debug 运行时间 0.015 s
代码语言 C++ 内存使用 0.29 MiB
提交时间 2015-11-01 11:54:27
显示代码纯文本
#include<cstdio>
using namespace std;
int n,m;
int link[11][11]={};
int ans=0;
int sgn(int a)
{
	if(a>0)
		return 1;
	else if(a==0)
		return 0;
	else
		return -1;
}
bool check()
{
	for(int k=1;k<=n;k++)
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(k!=i&&i!=j&&k!=j)
					if(link[i][j]&&link[i][k]&&link[k][j])
						return false;
					else if(sgn(link[i][j])+sgn(link[i][k])+sgn(link[j][k])==1)
						return false;
	return true;
}
void dfs(int a,int b)
{
	if(a==n)
	{
		if(check())ans++;
	}
	else if(b==n)
	{
		if(link[a][b]==1)
			link[a][b]=0,link[b][a]=0,dfs(a+1,a+2),link[a][b]=link[b][a]=1,dfs(a+1,a+2);
		else
			dfs(a+1,a+2);
	}
	else
	{
		if(link[a][b]==1)
			link[a][b]=0,link[b][a]=0,dfs(a,b+1),link[a][b]=link[b][a]=1,dfs(a,b+1);
		else
			dfs(a,b+1);
	}
}
int main()
{
	freopen("tria.in","r",stdin);
	freopen("tria.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=0;i<11;i++)
		for(int j=0;j<11;j++)
			link[i][j]=1;
	if(n<=7&&m>0)
	{
		for(int i=0;i<m;i++)
		{
			int a,b,c;
			scanf("%d%d%d",&a,&b,&c);
			if(a==1)
				link[b][c]=link[c][b]=2;
			else link[b][c]=link[c][b]=0;
		}
		dfs(1,2);
		printf("%d\n",ans);
		return 0;
	}
	else
	{
		ans=1;
		for(int i=1;i<n;i++)
			ans=ans*2%998244353;
		printf("%d\n",ans);
		return 0;
	}
}