QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1572#183802#61. Cut Cut Cut!HJY2022maoyitingFailed.2025-02-22 19:30:502025-02-22 19:30:50

Details

Extra Test:

Invalid Input

input:

3 3
1 2
1 3
3 2

output:


result:

FAIL Integer parameter [name=u] equals to 3, violates the range [1, 2] (stdin, line 4)

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#183802#61. Cut Cut Cut!maoyitingAC ✓793ms203776kbC++141.0kb2023-09-19 21:02:332023-09-19 21:02:33

answer

#include<bits/stdc++.h>
#define vec array<int,20>
using namespace std;
const int N=1e5+5,mod=998244353;
int n,m,d=20,x,y;
vector<int>v[N];
vec w;
mt19937 rnd(time(0));
vec operator+(vec a,vec b){
	for(int i=0;i<d;i++) a[i]=(a[i]+b[i])%mod;
	return a;
}
vec operator*(vec a,int b){
	for(int i=0;i<d;i++) a[i]=1ll*a[i]*b%mod;
	return a;
}
int qpow(int x,int n){
	int ans=1;
	for(;n;n>>=1,x=1ll*x*x%mod) if(n&1) ans=1ll*ans*x%mod;
	return ans;
}
struct B{
	int cnt;
	vec b[25];
	void insert(vec x){
		for(int i=d-1;i>=0;i--) if(x[i]){
			if(!b[i][i]){b[i]=x,cnt++;break;}
			else x=x+b[i]*(mod-1ll*x[i]*qpow(b[i][i],mod-2)%mod);
		}
	}
}in[N];
signed main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
		scanf("%d%d",&x,&y),v[x].push_back(y);
	for(int y:v[1]){
		for(int i=0;i<d;i++) w[i]=rnd();
		in[y].insert(w);
	}
	for(int x=2;x<=n;x++){
		printf("%d ",in[x].cnt);
		for(int y:v[x]){
			for(int i=0;i<d;i++) w[i]=0;
			for(int i=0;i<d;i++) w=w+in[x].b[i]*rnd();
			in[y].insert(w);
		}
	}
	return 0;
}