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 |
|
|
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 |