比赛 Asm_Def战记之透明计算网络 评测结果 WWWWWWWEEE
题目名称 Asm_Def三角形 最终得分 0
用户昵称 sro dydxh orz 运行时间 0.232 s
代码语言 C++ 内存使用 191.05 MiB
提交时间 2015-11-01 11:54:21
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int mod=998244353;
int n,m,ans=0,map[5000][5000],flag[5000][5000],f0,f1,f2;
void pd(int a,int b){
	if(map[a][b]==1)	f1++;
	if(map[a][b]==2)	f2++;
	else f0++;
}
int main(){
	freopen("tria.in","r",stdin);
	freopen("tria.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		map[b][c]=a+1;
		map[c][b]=a+1;
		//cout<<b<<' '<<c<<' '<<map[b][c]<<endl;
	}
	if(m==0){
		for(int i=n-1;i>=1;i--)
			ans+=i;ans%=mod;
		for(int i=n-2;i>=1;i--)
			ans+=i;ans%=mod;
	}
	else{
		for(int i=1;i<=n;i++)
			for(int j=1+i;j<=n;j++)
				for(int k=1+j;k<=n;k++)
					if(i!=j&&j!=k&&i!=k){
						int	a=map[i][j],b=map[j][k],c=map[i][k];
						if(a==0&&flag[i][j]==0&&flag[j][i]==0){
							if(b==0&&flag[j][k]==0&&flag[k][j]==0){
								flag[i][j]=1;flag[j][k]=1;
								if(c==0&&flag[i][k]==0&&flag[k][i]==0)	flag[i][k]=1,ans+=4;
								if(c==1)	ans++;
								if(c==2)	ans+=2;
							}
							if(b==1){
								if(c==1)	{ans++;flag[i][j]=1;}
								if(c==0&&flag[i][k]==0&&flag[k][i]==0)	{ans++;flag[i][j]=1;flag[i][k]==1;}
							}
							if(b==2){
								if(c==0&&flag[i][k]==0&&flag[k][i]==0)	{ans+=2;flag[i][j]=1;flag[i][k]=1;}
								if(c==2)	{ans++;flag[i][j]=1;}
							}
						}	
						if(b==0&&flag[j][k]!=1&&flag[k][j]!=1){
							if(a==0&&flag[i][j]!=1&&flag[j][i]!=1){
								flag[j][k]=1;flag[i][j]=1;
								if(c==0&&flag[k][i]!=1&&flag[i][k]!=1)	flag[k][i]=1,ans+=4;
								if(c==1)	ans++;
								if(c==2)	ans+=2;
							}
							if(a==1){
								if(c==1)	{ans++;flag[j][k]=1;}
								if(c==0&&flag[k][i]!=1&&flag[i][k]!=1)	{ans++;flag[j][k]=1;flag[i][k]=1;}
							}
							if(a==2){
								if(c==0&&flag[k][i]!=1&&flag[i][k]!=1)	{ans+=2;flag[j][k]=1;flag[j][i]=1;}
								if(c==2)	{ans++;flag[j][k]=1;}
							}
						}	
						if(c==0&&flag[i][k]==0&&flag[k][i]==0){
							if(a==0&&flag[i][j]==0&&flag[j][i]==0){
								flag[i][k]=1;flag[i][j]=1;
								if(b==0&&flag[j][i]!=1&&flag[i][j]!=1)	flag[j][i]=1,ans+=4;
								if(b==1)	ans++;
								if(b==2)	ans+=2;
							}
							if(a==1){
								if(b==1)	{ans++;flag[i][k]=1;}
								if(b==0&&flag[j][i]!=1&&flag[i][j]!=1)	{ans++;flag[i][j]=1;flag[i][k]=1;}
							}
							if(a==2){
								if(b==0&&flag[k][j]!=1&&flag[j][k]!=1)	{ans+=2;flag[j][k]=1;flag[k][i]=1;}
								if(b==2)	{ans++;flag[i][k]=1;}
							}
						}	
					}
	}
	cout<<ans<<endl;
	return 0;
}