#include<bits/stdc++.h> using namespace std; int T; int n,m; int fa[100010]; int d[100010]; int cnt; int cnt2; int fnd(int x) {return fa[x]==x?x:fa[x]=fnd(fa[x]);} void merg(int a,int b) { a=fnd(a);b=fnd(b); if(a==b) return; cnt--; fa[b]=a; } int main() { freopen("euler.in","r",stdin); freopen("euler.out","w",stdout); scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) fa[i]=i; cnt=n;cnt2=0; for(int i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); merg(u,v); d[u]++;d[v]++; } for(int i=1;i<=n;i++) if(d[i]&1) cnt2++,d[i]=0; if(cnt!=1||cnt2>2) printf("NO "); else printf("YES "); } }
//复仇者联盟不是一个人,所以有s #include<bits/stdc++.h> #define mod 998244353 #define inv 499122177 #define ll long long #define lowbit(x) (x&-x) using namespace std; ll dp[35][100010]; int n,m; ll wih[100010][6]; int k; ll ans[6]; int cont(int x) { int c=0; while(x) { x-=lowbit(x); c++; } return c; } int main() { freopen("avengers3.in","r",stdin); freopen("avengers3.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&k); int t; for(int j=1;j<=k;j++) { scanf("%d",&t); wih[t][i]=1; } } dp[(1<<n)-1][0]=1; int t1; for(int i=0;i<m;i++) { for(int j=(1<<n)-1;j>=0;j--) { if(dp[j][i]==0) continue; dp[j][i+1]+=(dp[j][i]*inv)%mod; dp[j][i+1]%=mod; t1=(1<<n)-1; for(int ii=1;ii<=n;ii++) { if(wih[i+1][ii])t1-=1<<(ii-1); } dp[j&t1][i+1]+=(dp[j][i]*inv)%mod; dp[j&t1][i+1]%=mod; } } for(int i=0;i<=(1<<n)-1;i++) { (ans[cont(i)]+=dp[i][m])%=mod; } for(int i=0;i<=n;i++) printf("%d ",ans[i]); }
#include<iostream> #include<cstdio> #include<algorithm> #include<cstdlib> #include<cmath> #include<cstring> #define mod 998244353 #define ll long long ll m; using namespace std; struct mat { ll a[60][60]; mat operator*(const mat &y)const { mat res; memset(res.a,0,sizeof(res.a)); for(ll i=0;i<m;i++) for(ll j=0;j<m;j++) for(ll k=0;k<m;k++) { res.a[i][j]+=a[i][k]*y.a[k][j]; res.a[i][j]%=mod; } return res; } }a,b; void mul(ll a[60][60],ll b[60][60],ll ans[60][60]) { ll tmp[60][60]; for(ll i=0;i<m;i++) for(ll j=0;j<m;j++) { tmp[i][j]=0; for(ll k=0;k<m;k++) tmp[i][j]=(tmp[i][j]+a[i][k]*b[k][j])%mod; } for(ll i=0;i<m;i++) for(ll j=0;j<m;j++) ans[i][j]=tmp[i][j]; } ll sum; char ch[60]; ll nxt[60]; char n[100010]; ll nl; mat getmat(mat a) { mat c=a; for(int i=1;i<=9;i++) c=c*a; return c; } int main() { freopen("string.in","r",stdin); freopen("string.out","w",stdout); scanf("%s",n+1); nl=strlen(n+1); scanf("%s",ch+1); m=strlen(ch+1); ll j=0; for(ll i=2;i<=m;i++) { for(;j>0 && ch[j+1]!=ch[i];j=nxt[j]); if(ch[j+1]==ch[i])j++; nxt[i]=j; } for(ll i=0;i<m;i++) for(ll j=0;j<=25;j++) { ll t=i; for(;t>0&&ch[t+1]-'a'!=j;t=nxt[t]); if(ch[t+1]-'a'==j)t++; if(t!=m)b.a[t][i]=(b.a[t][i]+1)%mod; } for(ll i=0;i<m;i++)a.a[i][i]=1; while(nl>0) { for(int i=1;i<=n[nl]-'0';i++) a=a*b; b=getmat(b); nl--; } for(ll i=0;i<m;i++)(sum+=a.a[i][0])%=mod; printf("%d",sum); return 0; }
明天好虚。。。