比赛 |
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;
}