WA 了一个点求助
查看原帖
WA 了一个点求助
755947
_FJqwq楼主2024/4/25 20:12
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=4e5+5,mod=998244353;
ll n,m,res=1,X[N],Y[N],Z[N],maxx[N],w[N],px,py,cnt[N],tot;
struct edge{int fr,to;};vector<edge>b[N];
int main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++) maxx[i]=n;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&X[i],&Y[i],&Z[i]);
		b[Z[i]].push_back(edge{X[i],Y[i]});
		maxx[X[i]]=min(maxx[X[i]],Z[i]);
		maxx[Y[i]]=min(maxx[Y[i]],Z[i]);
	}
	for(int i=1;i<=m;i++){
		if(maxx[X[i]]>=Z[i]) continue;
		if(maxx[Y[i]]>=Z[i]) continue;
		puts("0");
		return 0;
	}
	for(int i=1;i<=n;i++) cnt[maxx[i]]++;
	for(int i=n,l;i>=1;i--){
		l=b[i].size();tot+=cnt[i];
		if(l>=2){
			px=b[i][0].fr,py=b[i][0].to;
			for(int j=1;j<l;j++){
				if((px!=b[i][j].fr)&&(px!=b[i][j].to)) px=0;
				if((py!=b[i][j].fr)&&(py!=b[i][j].to)) py=0;
			}
			px=(px|py);
			if(!px){puts("0");return 0;}
			if(maxx[px]<i){puts("0");return 0;}
			w[px]=i;
		}
		if(l==1){
			px=b[i][0].fr,py=b[i][0].to;
			if(maxx[px]<i) px=0;
			if(maxx[py]<i) py=0;
			if((!px)&&(!py)){puts("0");return 0;}
			if(px&&py) res=res*2ll;
		}
		if(!l) res=res*tot%mod;
		tot--;
	}
	printf("%lld\n",(res%mod+mod)%mod);
 	return 0;
}

讨论区的样例过了

2024/4/25 20:12
加载中...