萌新自闭求助
查看原帖
萌新自闭求助
87064
ducati楼主2021/6/25 19:05

几个小时前写出来了这题,发现 WA,然后对着题解看了两个多小时也没有发现任何问题/kk

所以有没有愿意把我的代码与题解的对照一下或者一眼妙出错误啊/kel

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=100005,maxm=100005,mod=998244353;
const int inf=(1000000000000000000)%998244353;

int read(){
	int s=0,w=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-')  w=-w;ch=getchar();}
	while (ch>='0'&&ch<='9'){s=(s*10+(ch^'0'));ch=getchar();}
	return s*w;
}
int n,m,cnt,ans;
int head[maxn],tmp[3][maxn],ducati[3][maxn],maxv[3],p[maxn];

struct edge{int nxt,to;}e[maxm];
void add_edge(int u,int v){
	cnt++;
	e[cnt].to=v,e[cnt].nxt=head[u],head[u]=cnt;
}

signed main(){
	n=read();
	p[0]=1;
	for (int i=1;i<=n;i++)  p[i]=(p[i-1]*inf)%mod;
	for (int f=0;f<3;f++){
		m=read(),cnt=0;
		for (int i=1;i<=n;i++)  head[i]=0;
		for (int i=1;i<=m;i++){
			int u=read(),v=read();
			if (u>v)  swap(u,v);
			add_edge(u,v);
		}
		for (int now=n;now>=1;now--){
			set<int> s;
			for (int i=head[now];i;i=e[i].nxt)  s.insert(tmp[f][e[i].to]);
			while (s.count(tmp[f][now]))  tmp[f][now]++;
		}
		for (int i=1;i<=n;i++){
			ducati[f][tmp[f][i]]=(ducati[f][tmp[f][i]]+p[i])%mod;
			maxv[f]=max(maxv[f],tmp[f][i]);
		}
	}
	for (int i=0;i<=maxv[1];i++){
		for (int j=0;j<=maxv[2];j++){
			int k=(i^j);
			int cur=(ducati[0][i]*ducati[1][j])%mod;
			cur=(cur*ducati[2][k])%mod;
			ans=(ans+cur)%mod;
		}
	}
	cout<<ans<<endl;
	
	return 0;
}
2021/6/25 19:05
加载中...