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
AC × 3
AC × 64
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