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