Submission #1502915


Source Code Expand

// This amazing code is by Eric Sunli Chen.
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <utility>
#include <stack>
#include <vector>
using namespace std;
template<typename T> void get_int(T &x)
{
	char t=getchar();
	bool neg=false;
	x=0;
	for(; (t>'9'||t<'0')&&t!='-'; t=getchar());
	if(t=='-')neg=true,t=getchar();
	for(; t<='9'&&t>='0'; t=getchar())x=x*10+t-'0';
	if(neg)x=-x;
}
template<typename T> void print_int(T x)
{
	if(x<0)putchar('-'),x=-x;
	short a[20]= {},sz=0;
	while(x>0)a[sz++]=x%10,x/=10;
	if(sz==0)putchar('0');
	for(int i=sz-1; i>=0; i--)putchar('0'+a[i]);
}
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define get1(a) get_int(a)
#define get2(a,b) get1(a),get1(b)
#define get3(a,b,c) get1(a),get2(b,c)
#define printendl(a) print_int(a),puts("")
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const LL Linf=1ll<<61;
const double pi=acos(-1.0);

const int mod=1e9+7;

int power(int x,int y)
{
	int ret=1;
	while(y)
	{
		if(y&1)ret=1ll*ret*x%mod;
		x=1ll*x*x%mod;y>>=1;
	}
	return ret;
}

int n,m,k,comp,ex[111],ey[111],c[211][211],pwk[111];
bool con[55][55];

stack<pii> stk;
vector<pii> bcc[55];

int pre[55],timer,bcc_cnt;
int dfs(int u,int fa)
{
	int lowu=pre[u]=++timer;
	for(int v=1;v<=n;v++)if(con[u][v])
	{
		pii e=mp(u,v);
		if(!pre[v])
		{
			stk.push(e);
			int lowv=dfs(v,u);lowu=min(lowu,lowv);
			if(lowv>=pre[u])
			{
				bcc_cnt++;
				while(!stk.empty())
				{
					bcc[bcc_cnt].pb(stk.top());
					stk.pop();
					if(*bcc[bcc_cnt].rbegin()==e)break;
				}
			}
		}
		else if(pre[v]<pre[u]&&v!=fa)
		{
			stk.push(e);
			lowu=min(lowu,pre[v]);
		}
	}
	return lowu;
}

int main()
{
	for(int i=0;i<211;i++)
	{
		c[i][0]=1;
		for(int j=1;j<=i;j++)
		{
			c[i][j]=c[i-1][j]+c[i-1][j-1];
			if(c[i][j]>=mod)c[i][j]-=mod;
		}
	}
	
	get3(n,m,k);
	pwk[0]=1;for(int i=1;i<111;i++)pwk[i]=1ll*pwk[i-1]*k%mod;
	for(int i=1;i<=m;i++)
	{
		get2(ex[i],ey[i]);
		con[ex[i]][ey[i]]=con[ey[i]][ex[i]]=1;
	}
	
	for(int i=1;i<=n;i++)if(!pre[i])dfs(i,0);
	
	int ans=1;
	for(int i=1;i<=bcc_cnt;i++)
	{
		int sz=(int)bcc[i].size();
		set<int> tmp;
		for(int j=0;j<sz;j++)
		{
			tmp.insert(bcc[i][j].ff);
			tmp.insert(bcc[i][j].ss);
		}
		if(sz==1)ans=1ll*ans*k%mod;
		else
		{
			if((int)tmp.size()==sz)
			{
				int sum=0;
				for(int j=1;j<=sz;j++)
				{
					sum+=pwk[__gcd(sz,j)];
					if(sum>=mod)sum-=mod;
				}
				ans=1ll*sum*ans%mod*power(sz,mod-2)%mod;
			}
			else ans=1ll*ans*c[sz+k-1][k-1]%mod;
		}
	}
	
	printendl(ans);
	return 0;
}

Submission Info

Submission Time
Task F - Painting Graphs with AtCoDeer
User OhWeOnFire
Language C++14 (GCC 5.4.1)
Score 1300
Code Size 2900 Byte
Status AC
Exec Time 1 ms
Memory 384 KB

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 1 ms 384 KB
0_001.txt AC 1 ms 384 KB
0_002.txt AC 1 ms 384 KB
1_003.txt AC 1 ms 384 KB
1_004.txt AC 1 ms 384 KB
1_005.txt AC 1 ms 384 KB
1_006.txt AC 1 ms 384 KB
1_007.txt AC 1 ms 384 KB
1_008.txt AC 1 ms 384 KB
1_009.txt AC 1 ms 384 KB
1_010.txt AC 1 ms 384 KB
1_011.txt AC 1 ms 384 KB
1_012.txt AC 1 ms 384 KB
1_013.txt AC 1 ms 384 KB
1_014.txt AC 1 ms 384 KB
1_015.txt AC 1 ms 384 KB
1_016.txt AC 1 ms 384 KB
1_017.txt AC 1 ms 384 KB
1_018.txt AC 1 ms 384 KB
1_019.txt AC 1 ms 384 KB
1_020.txt AC 1 ms 384 KB
1_021.txt AC 1 ms 384 KB
1_022.txt AC 1 ms 384 KB
1_023.txt AC 1 ms 384 KB
1_024.txt AC 1 ms 384 KB
1_025.txt AC 1 ms 384 KB
1_026.txt AC 1 ms 384 KB
1_027.txt AC 1 ms 384 KB
1_028.txt AC 1 ms 384 KB
1_029.txt AC 1 ms 384 KB
1_030.txt AC 1 ms 384 KB
1_031.txt AC 1 ms 384 KB
1_032.txt AC 1 ms 384 KB
1_033.txt AC 1 ms 384 KB
1_034.txt AC 1 ms 384 KB
1_035.txt AC 1 ms 384 KB
1_036.txt AC 1 ms 384 KB
1_037.txt AC 1 ms 384 KB
1_038.txt AC 1 ms 384 KB
1_039.txt AC 1 ms 384 KB
1_040.txt AC 1 ms 384 KB
1_041.txt AC 1 ms 384 KB
1_042.txt AC 1 ms 384 KB
1_043.txt AC 1 ms 384 KB
1_044.txt AC 1 ms 384 KB
1_045.txt AC 1 ms 384 KB
1_046.txt AC 1 ms 384 KB
1_047.txt AC 1 ms 384 KB
1_048.txt AC 1 ms 384 KB
1_049.txt AC 1 ms 384 KB
1_050.txt AC 1 ms 384 KB
1_051.txt AC 1 ms 384 KB
1_052.txt AC 1 ms 384 KB
1_053.txt AC 1 ms 384 KB
1_054.txt AC 1 ms 384 KB
1_055.txt AC 1 ms 384 KB
1_056.txt AC 1 ms 384 KB
1_057.txt AC 1 ms 384 KB
1_058.txt AC 1 ms 384 KB
1_059.txt AC 1 ms 384 KB
1_060.txt AC 1 ms 384 KB
1_061.txt AC 1 ms 384 KB
1_062.txt AC 1 ms 384 KB
1_063.txt AC 1 ms 384 KB