1 solutions
-
0
C++ :
#include<iostream> #include<cmath> #include<cstring> #include<stdio.h> #include<algorithm> #include<cassert> using namespace std; const int N=500100,mo=998244353; struct bian{ int next,point; }b[N<<2]; int p[N],len,n,m,father[N],num[N],d[N],a[N],f[N]; void ade(int k1,int k2){ b[++len]=(bian){p[k1],k2}; p[k1]=len; } void add(int k1,int k2){ ade(k1,k2); ade(k2,k1); } void dfs(int k1){ for (int i=p[k1];i!=-1;i=b[i].next){ int j=b[i].point; if (d[j]==0){ father[j]=k1; d[j]=d[k1]+1; dfs(j); } } } int dp[N]; int compare(int k1,int k2){ return d[k1]<d[k2]; } void getans(int k1,int flag=0){ num[k1]=-1; dp[k1]=1; int tot=0; for (int i=p[k1];i!=-1;i=b[i].next){ int j=b[i].point; if (num[j]==1){ getans(j); dp[k1]=1ll*dp[k1]*dp[j]%mo; tot++; } } if (tot==0) return; if (flag==0) dp[k1]=1ll*dp[k1]*(f[tot]+1ll*tot*f[tot-1]%mo)%mo; else dp[k1]=1ll*dp[k1]*f[tot]%mo; } int getfather(int k1){ if (a[k1]==k1) return k1; return a[k1]=getfather(a[k1]); } void solve(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) p[i]=-1,father[i]=num[i]=d[i]=0,a[i]=i; len=-1; for (int i=1;i<=m;i++){ int k1,k2; scanf("%d%d",&k1,&k2); add(k1,k2); //a[getfather(k1)]=getfather(k2); } /* for (int i=1;i<=n;i++){ assert(getfather(i)==getfather(1)); } for (int i=1;i<=n;i++) a[i]=i;*/ d[1]=1; dfs(1); sort(a+1,a+n+1,compare); // cout<<"asd"<<endl; // for (int i=1;i<=n;i++) cout<<father[i]<<" "; cout<<endl; for (int i=1;i<=m;i++){ int u=b[(i-1)<<1].point,v=b[(i<<1)-1].point; if (d[u]<d[v]) swap(u,v); // cout<<u<<" "<<v<<endl; while (u!=v){ num[u]++; if (num[u]>2){ printf("0\n"); return; } u=father[u]; } } int ans=1; for (int i=1;i<=n;i++) if (num[a[i]]!=-1){ // cout<<"fa "<<a[i]<<endl; getans(a[i],1); ans=1ll*ans*dp[a[i]]%mo; } printf("%d\n",ans); } int main(){ //freopen("cactus.in","r",stdin); //freopen("cactus.out","w",stdout); f[0]=1; f[1]=1; for (int i=2;i<=500000;i++) f[i]=(f[i-1]+1ll*(i-1)*f[i-2])%mo; int t; scanf("%d",&t); for (;t;t--){ solve(); } return 0; }
- 1
Information
- ID
- 18790
- Time
- 1000ms
- Memory
- 512MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By