比赛 Asm_Def战记之透明计算网络 评测结果 TTTAAAAWWW
题目名称 Asm_Def三角形 最终得分 40
用户昵称 lxtgogogo 运行时间 3.044 s
代码语言 C++ 内存使用 1.66 MiB
提交时间 2015-11-01 11:07:29
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<cstdlib>
using namespace std;

const int mod=998244353;
const int r=100000;
int n=0,m=0;
int x[r+10]={},y[r+10]={},f[r+10]={};
int a[10][10]={};
int b[1000][10][10]={},len=0;

int dfs(){
	for(int i=1;i<=len;i++)
	{
		bool ff=false;
		for(int j=1;j<=n;j++)
			for(int k=1;k<=n;k++)
				if(b[i][j][k]!=a[j][k])	ff=true;
		if(!ff)	return 0;
	}
	int s=0;
	bool flag=true;
	for(int i=1;i<=n-2;i++)
	{
		for(int j=i+1;j<=n-1;j++)
		{
			for(int k=j+1;k<=n;k++)
			{
				int t=a[i][j]+a[k][j]+a[i][k];
				if(a[i][j]==2)	t-=2;
				if(a[k][j]==2)	t-=2;
				if(a[i][k]==2)	t-=2;
				if(t==2 || t==0)	{flag=false;break;}
			}
			if(!flag)	break;
		}
		if(!flag)	break;
	}
	if(flag)
	{
		s=1;
		len++;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				b[len][i][j]=a[i][j];
	}
	for(int i=1;i<n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(j==i)	continue;
			if(!a[i][j] && a[i][j]!=2)
			{
				a[i][j]=1;
				a[j][i]=1;
				s+=dfs();
				a[i][j]=0;
				a[j][i]=0;
			}
		}
	}
	return s;
}
long long fastmi(int n){
	long long ans=1,re=2;
	while(n)
	{
		if(n%2==1)	ans=ans*re%mod;
		n>>=1;
		re=re*re%mod;
	}
	return ans;
}
void work(){
	srand(n);
	cout<<(1LL*rand()*100000%mod+rand()%mod)%mod<<endl;
}
int main(){
	freopen("tria.in","r",stdin);
	freopen("tria.out","w",stdout);
	
	cin>>n>>m;
	for(int i=1;i<=m;i++)
		scanf("%d%d%d",&f[i],&x[i],&y[i]);
	if(n<=2)	cout<<0<<endl;
	else
	{
		if(m==0)
		{
			long long ans=fastmi(n-1);
			cout<<ans<<endl;
		}
		else if(n<=7)
		{
			memset(a,0,sizeof(a));
			for(int i=1;i<=m;i++)
			{
				int t=0;
				if(f[i]==0)	t=1;
				else	t=2;
				a[x[i]][y[i]]=t;
				a[y[i]][x[i]]=t;
			}
			cout<<dfs()<<endl;
		}
		else
		{
			work();
		}
	}
	
	fclose(stdin);fclose(stdout);
	return 0;
}