Submission #11898577
Source Code Expand
//Love and Freedom.
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long
#define inf 20021225
#define mdn 1000000007
#define N 100010
#include<stack>
using namespace std;
int read()
{
int s=0,t=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') t=-1; ch=getchar();}
while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar();
return s*t;
}
int ksm(int bs,int mi)
{
int ans=1;
while(mi)
{
if(mi&1) ans=1ll*ans*bs%mdn;
bs=1ll*bs*bs%mdn; mi>>=1;
}
return ans;
}
struct edge{int to,lt;}e[N<<1];
int in[N],cnt,fac[N],inv[N];
void add(int x,int y)
{
e[++cnt].to=y; e[cnt].lt=in[x]; in[x]=cnt;
e[++cnt].to=x; e[cnt].lt=in[y]; in[y]=cnt;
}
int dfn[N],low[N],tms,col[N],cl,tot[N],edg[N]; ll mas[N];
stack<int> stk;
void tarjan(int x)
{
dfn[x]=low[x]=++tms; stk.push(x);
for(int i=in[x];i;i=e[i].lt)
{
int y=e[i].to;
if(dfn[y])
low[x]=min(low[x],dfn[y]);
else
{
tarjan(y), low[x]=min(low[x],low[y]);
if(low[y]>=dfn[x])
{
int w=0,p=0; ++cl;
do
{
w=stk.top(); stk.pop(); mas[w]|=1ll<<cl; p++;
}while(w!=y);
tot[cl]=p+1; mas[x]|=1ll<<cl;
}
}
}
}
int C(int n,int m){return n<m?0:1ll*fac[n]*inv[m]%mdn*inv[n-m]%mdn;}
int ans=1,u[N],v[N],n,m,k;
void solve()
{
fac[0]=1;
for(int i=1;i<=m+k;i++) fac[i]=1ll*fac[i-1]*i%mdn;
inv[m+k]=ksm(fac[m+k],mdn-2);
for(int i=m+k;i;i--) inv[i-1]=1ll*inv[i]*i%mdn;
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
for(int i=1;i<=m;i++)
{
if(!(mas[u[i]]&mas[v[i]])) ans=1ll*ans*k%mdn;
else
{
ll ms=mas[u[i]]&mas[v[i]];
for(int j=1;j<=cl;j++) if(ms>>j&1)
edg[j]++;
}
}
for(int i=1;i<=cl;i++) if(edg[i]>=tot[i])
{
if(edg[i]==tot[i])
{
int val=0;
for(int j=1;j<=edg[i];j++)
{
val+=ksm(k,__gcd(j,edg[i]));
if(val>=mdn) val-=mdn;
}
ans=1ll*ans*ksm(edg[i],mdn-2)%mdn*val%mdn;
}
else ans=1ll*ans*C(edg[i]+k-1,k-1)%mdn;
}
else ans=1ll*ans*k%mdn;
printf("%d\n",ans);
}
int main()
{
n=read(),m=read(),k=read();
for(int i=1;i<=m;i++) add(u[i]=read(),v[i]=read());
solve();
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Painting Graphs with AtCoDeer |
| User | hanyuwei |
| Language | C++14 (GCC 5.4.1) |
| Score | 1300 |
| Code Size | 2163 Byte |
| Status | AC |
| Exec Time | 2 ms |
| Memory | 4352 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 1300 / 1300 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 0_000.txt, 0_001.txt, 0_002.txt |
| All | 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 1_033.txt, 1_034.txt, 1_035.txt, 1_036.txt, 1_037.txt, 1_038.txt, 1_039.txt, 1_040.txt, 1_041.txt, 1_042.txt, 1_043.txt, 1_044.txt, 1_045.txt, 1_046.txt, 1_047.txt, 1_048.txt, 1_049.txt, 1_050.txt, 1_051.txt, 1_052.txt, 1_053.txt, 1_054.txt, 1_055.txt, 1_056.txt, 1_057.txt, 1_058.txt, 1_059.txt, 1_060.txt, 1_061.txt, 1_062.txt, 1_063.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 0_000.txt | AC | 2 ms | 4352 KiB |
| 0_001.txt | AC | 2 ms | 4352 KiB |
| 0_002.txt | AC | 1 ms | 4352 KiB |
| 1_003.txt | AC | 2 ms | 4352 KiB |
| 1_004.txt | AC | 1 ms | 4352 KiB |
| 1_005.txt | AC | 1 ms | 4352 KiB |
| 1_006.txt | AC | 1 ms | 4352 KiB |
| 1_007.txt | AC | 2 ms | 4352 KiB |
| 1_008.txt | AC | 1 ms | 4352 KiB |
| 1_009.txt | AC | 1 ms | 4352 KiB |
| 1_010.txt | AC | 1 ms | 4352 KiB |
| 1_011.txt | AC | 1 ms | 4352 KiB |
| 1_012.txt | AC | 2 ms | 4352 KiB |
| 1_013.txt | AC | 2 ms | 4352 KiB |
| 1_014.txt | AC | 1 ms | 4352 KiB |
| 1_015.txt | AC | 1 ms | 4352 KiB |
| 1_016.txt | AC | 1 ms | 4352 KiB |
| 1_017.txt | AC | 2 ms | 4352 KiB |
| 1_018.txt | AC | 1 ms | 4352 KiB |
| 1_019.txt | AC | 1 ms | 4352 KiB |
| 1_020.txt | AC | 1 ms | 4352 KiB |
| 1_021.txt | AC | 1 ms | 4352 KiB |
| 1_022.txt | AC | 1 ms | 4352 KiB |
| 1_023.txt | AC | 1 ms | 4352 KiB |
| 1_024.txt | AC | 1 ms | 4352 KiB |
| 1_025.txt | AC | 1 ms | 4352 KiB |
| 1_026.txt | AC | 1 ms | 4352 KiB |
| 1_027.txt | AC | 1 ms | 4352 KiB |
| 1_028.txt | AC | 1 ms | 4352 KiB |
| 1_029.txt | AC | 2 ms | 4352 KiB |
| 1_030.txt | AC | 2 ms | 4352 KiB |
| 1_031.txt | AC | 1 ms | 4352 KiB |
| 1_032.txt | AC | 2 ms | 4352 KiB |
| 1_033.txt | AC | 1 ms | 4352 KiB |
| 1_034.txt | AC | 1 ms | 4352 KiB |
| 1_035.txt | AC | 2 ms | 4352 KiB |
| 1_036.txt | AC | 2 ms | 4352 KiB |
| 1_037.txt | AC | 2 ms | 4352 KiB |
| 1_038.txt | AC | 2 ms | 4352 KiB |
| 1_039.txt | AC | 2 ms | 4352 KiB |
| 1_040.txt | AC | 2 ms | 4352 KiB |
| 1_041.txt | AC | 2 ms | 4352 KiB |
| 1_042.txt | AC | 2 ms | 4352 KiB |
| 1_043.txt | AC | 2 ms | 4352 KiB |
| 1_044.txt | AC | 2 ms | 4352 KiB |
| 1_045.txt | AC | 2 ms | 4352 KiB |
| 1_046.txt | AC | 2 ms | 4352 KiB |
| 1_047.txt | AC | 2 ms | 4352 KiB |
| 1_048.txt | AC | 2 ms | 4352 KiB |
| 1_049.txt | AC | 2 ms | 4352 KiB |
| 1_050.txt | AC | 2 ms | 4352 KiB |
| 1_051.txt | AC | 2 ms | 4352 KiB |
| 1_052.txt | AC | 2 ms | 4352 KiB |
| 1_053.txt | AC | 2 ms | 4352 KiB |
| 1_054.txt | AC | 2 ms | 4352 KiB |
| 1_055.txt | AC | 2 ms | 4352 KiB |
| 1_056.txt | AC | 2 ms | 4352 KiB |
| 1_057.txt | AC | 2 ms | 4352 KiB |
| 1_058.txt | AC | 2 ms | 4352 KiB |
| 1_059.txt | AC | 2 ms | 4352 KiB |
| 1_060.txt | AC | 2 ms | 4352 KiB |
| 1_061.txt | AC | 2 ms | 4352 KiB |
| 1_062.txt | AC | 2 ms | 4352 KiB |
| 1_063.txt | AC | 2 ms | 4352 KiB |