Submission #1015868
Source Code Expand
#include <bits/stdc++.h> using namespace std; const int mod = 1000000007; long long modpow(long long x, int y) { if (y == 0) return 1; if (y == 1) return x; long long z = modpow(x, y/2); z = z*z % mod; if (y % 2) z = z*x % mod; return z; } long long modinv(long long x) { return modpow(x, mod-2); } long long modfact(int n) { long long r = 1; for (int i = 1; i <= n; ++ i) r = r*i % mod; return r; } long long modcomb(int n, int k) { return modfact(n) * modinv(modfact(k)) % mod * modinv(modfact(n-k)) % mod; } struct BComp { const vector<vector<int>>& G; vector<int> ord; vector<int> low; vector<pair<int,int>> S; vector<vector<pair<int,int>>> bcomp; BComp(const vector<vector<int>>& G) : G(G), ord(G.size(),-1), low(G.size()) { for (int u = 0; u < (int)G.size(); ++ u) if (ord[u] == -1) { ord[u] = low[u] = 0; dfs(u, -1); } } int dfs(int u, int p) { int cnt=1; for (int v : G[u]) if(v != p) { if (ord[v] < ord[u]) S.emplace_back(u,v); if (ord[v] == -1) { ord[v] = low[v] = ord[u]+cnt; cnt += dfs(v, u); low[u] = min(low[u],low[v]); if (ord[u] <= low[v]) { bcomp.emplace_back(); for (;;) { auto e = S.back(); S.pop_back(); bcomp.back().push_back(e); if(e == make_pair(u,v)) break; } } } else { low[u] = min(low[u],ord[v]); } } } }; bool iscycle(const vector<pair<int,int>>& x) { set<int> s; for (auto p : x) { s.insert(p.first); s.insert(p.second); } return s.size() == x.size(); } int main() { int N, M, K; vector<vector<int>> G; cin >> N >> M >> K; G.resize(N); for (int i = 0; i < M; ++ i) { int x, y; cin >> x >> y; -- x; -- y; G[x].push_back(y); G[y].push_back(x); } BComp a(G); long long r = 1; for (const auto& x : a.bcomp) { if (x.size() == 1) { r = (r * K) % mod; } else if (iscycle(x)) { int n = x.size(); long long rr = 0; for (int i = 0; i < n; ++ i) { rr = (rr + modpow(K, __gcd(n, i))) % mod; } rr = rr * modinv(n) % mod; r = (r * rr) % mod; } else { int m = x.size(); r = (r * modcomb(m+K-1, K-1)) % mod; } } cout << r << endl; }
Submission Info
Submission Time | |
---|---|
Task | F - Painting Graphs with AtCoDeer |
User | hasi |
Language | C++14 (GCC 5.4.1) |
Score | 1300 |
Code Size | 2240 Byte |
Status | AC |
Exec Time | 3 ms |
Memory | 256 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 | 3 ms | 256 KB |
0_001.txt | AC | 3 ms | 256 KB |
0_002.txt | AC | 3 ms | 256 KB |
1_003.txt | AC | 3 ms | 256 KB |
1_004.txt | AC | 3 ms | 256 KB |
1_005.txt | AC | 3 ms | 256 KB |
1_006.txt | AC | 3 ms | 256 KB |
1_007.txt | AC | 3 ms | 256 KB |
1_008.txt | AC | 3 ms | 256 KB |
1_009.txt | AC | 3 ms | 256 KB |
1_010.txt | AC | 3 ms | 256 KB |
1_011.txt | AC | 3 ms | 256 KB |
1_012.txt | AC | 3 ms | 256 KB |
1_013.txt | AC | 3 ms | 256 KB |
1_014.txt | AC | 3 ms | 256 KB |
1_015.txt | AC | 3 ms | 256 KB |
1_016.txt | AC | 3 ms | 256 KB |
1_017.txt | AC | 3 ms | 256 KB |
1_018.txt | AC | 3 ms | 256 KB |
1_019.txt | AC | 3 ms | 256 KB |
1_020.txt | AC | 3 ms | 256 KB |
1_021.txt | AC | 3 ms | 256 KB |
1_022.txt | AC | 3 ms | 256 KB |
1_023.txt | AC | 2 ms | 256 KB |
1_024.txt | AC | 3 ms | 256 KB |
1_025.txt | AC | 3 ms | 256 KB |
1_026.txt | AC | 3 ms | 256 KB |
1_027.txt | AC | 3 ms | 256 KB |
1_028.txt | AC | 3 ms | 256 KB |
1_029.txt | AC | 3 ms | 256 KB |
1_030.txt | AC | 3 ms | 256 KB |
1_031.txt | AC | 3 ms | 256 KB |
1_032.txt | AC | 3 ms | 256 KB |
1_033.txt | AC | 3 ms | 256 KB |
1_034.txt | AC | 3 ms | 256 KB |
1_035.txt | AC | 3 ms | 256 KB |
1_036.txt | AC | 3 ms | 256 KB |
1_037.txt | AC | 3 ms | 256 KB |
1_038.txt | AC | 2 ms | 256 KB |
1_039.txt | AC | 3 ms | 256 KB |
1_040.txt | AC | 2 ms | 256 KB |
1_041.txt | AC | 2 ms | 256 KB |
1_042.txt | AC | 3 ms | 256 KB |
1_043.txt | AC | 3 ms | 256 KB |
1_044.txt | AC | 3 ms | 256 KB |
1_045.txt | AC | 3 ms | 256 KB |
1_046.txt | AC | 3 ms | 256 KB |
1_047.txt | AC | 3 ms | 256 KB |
1_048.txt | AC | 3 ms | 256 KB |
1_049.txt | AC | 3 ms | 256 KB |
1_050.txt | AC | 3 ms | 256 KB |
1_051.txt | AC | 2 ms | 256 KB |
1_052.txt | AC | 3 ms | 256 KB |
1_053.txt | AC | 3 ms | 256 KB |
1_054.txt | AC | 3 ms | 256 KB |
1_055.txt | AC | 3 ms | 256 KB |
1_056.txt | AC | 3 ms | 256 KB |
1_057.txt | AC | 3 ms | 256 KB |
1_058.txt | AC | 3 ms | 256 KB |
1_059.txt | AC | 3 ms | 256 KB |
1_060.txt | AC | 2 ms | 256 KB |
1_061.txt | AC | 3 ms | 256 KB |
1_062.txt | AC | 3 ms | 256 KB |
1_063.txt | AC | 3 ms | 256 KB |