Submission #19995

#TimeUsernameProblemLanguageResultExecution timeMemory
19995gs12117트리 (kriii4_X)C++98
100 / 100
195 ms11084 KiB
#include<stdio.h> #include<map> long long int n,m; int mod=1000000007; long long int ans; std::map<int,int> mp; int eg[100100][2]; int cnt; int uft[200100]; int uftn[200100]; int mpow(int x,int y){ if(y==0)return 1; long long int r=mpow(x,y/2); r*=r; r%=mod; if(y%2==1){ r*=x; r%=mod; } return r; } int uftf(int x){ if(x==uft[x])return x; return uft[x]=uftf(uft[x]); } int main(){ int i,j; scanf("%d%d",&n,&m); for(i=0;i<m;i++){ scanf("%d%d",&eg[i][0],&eg[i][1]); if(mp[eg[i][0]]==0){ cnt++; mp[eg[i][0]]=cnt; } eg[i][0]=mp[eg[i][0]]; if(mp[eg[i][1]]==0){ cnt++; mp[eg[i][1]]=cnt; } eg[i][1]=mp[eg[i][1]]; } for(i=1;i<=cnt;i++){ uft[i]=i; uftn[i]=1; } for(i=0;i<m;i++){ if(uftf(eg[i][0])!=uftf(eg[i][1])){ uftn[uftf(eg[i][0])]+=uftn[uftf(eg[i][1])]; uft[uftf(eg[i][1])]=uftf(eg[i][0]); } else{ printf("0"); return 0; } } ans=1; for(i=1;i<=cnt;i++){ if(uftf(i)==i){ ans*=uftn[i]; ans%=mod; } } if(m==n-1)ans=1; else ans*=mpow(n,n-m-2); ans%=mod; printf("%lld",ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...