Submission #931089
Source Code Expand
#define _USE_MATH_DEFINES #include <algorithm> #include <cstdio> #include <functional> #include <iostream> #include <cfloat> #include <climits> #include <cstdlib> #include <cstring> #include <cmath> #include <map> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <time.h> #include <vector> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> i_i; typedef pair<ll, int> ll_i; typedef pair<double, int> d_i; typedef pair<ll, ll> ll_ll; typedef pair<double, double> d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int t; vector<int> unko; int gcd(int a, int b) { return b ? gcd(b, a % b) : a; } bool dfs(int u, int p, vector<vector<int> >& G, vector<int>& path, vector<bool>& vis, bool flag) { if (vis[u]) return false; vis[u] = true; path.push_back(u); if (u == t) { unko = path; return true; } if (flag) reverse(G[u].begin(), G[u].end()); for (int v: G[u]) { if (v == p) continue; if (dfs(v, u, G, path, vis, flag)) { if (flag) reverse(G[u].begin(), G[u].end()); return true; } } path.pop_back(); if (flag) reverse(G[u].begin(), G[u].end()); return false; } ll extgcd(ll a, ll b, ll& x, ll& y) { if (b == 0) { x = (a >= 0) ? 1 : -1; y = 0; return abs(a); } else { ll res = extgcd(b, a % b, y, x); y -= (a / b) * x; return res; } } ll mod_inverse(ll a, ll m) { ll x, y; extgcd(a, m, x, y); return (m + x % m) % m; } ll c(ll n, ll k) { ll res = 1; for (int i = 0; i < k; i++) res = (res * ((n - i) % 1000000007)) % 1000000007; for (int i = 1; i <= k; i++) res = (res * mod_inverse(i, 1000000007)) % 1000000007; return res; } struct union_find { vector<int> v; union_find(int n) : v(n, -1) {} int find(int x) { return (v[x] < 0) ? x : (v[x] = find(v[x])); } void unite(int x, int y) { x = find(x); y = find(y); if (x != y) { if (-v[x] < -v[y]) swap(x, y); v[x] += v[y]; v[y] = x; } } bool same(int x, int y) { return find(x) == find(y); } int size(int x) { return -v[find(x)]; } }; int main() { int N, M, K; cin >> N >> M >> K; vector<int> a(M), b(M); for (int i = 0; i < M; i++) { cin >> a[i] >> b[i]; a[i]--; b[i]--; } vector<vector<int> > G(N); for (int i = 0; i < M; i++) { G[a[i]].push_back(b[i]); G[b[i]].push_back(a[i]); } ll ans = 1; union_find uf(N); union_find uf2(N); set<set<int> > hoge; for (int i = 0; i < M; i++) { vector<int> a1, a2; t = b[i]; { unko.clear(); vector<int> path; vector<bool> vis(N); dfs(a[i], b[i], G, path, vis, false); a1 = unko; } { unko.clear(); vector<int> path; vector<bool> vis(N); dfs(a[i], b[i], G, path, vis, true); a2 = unko; } if (a1.empty()) { ans = ans * K % MOD; } else if (a1 == a2) { set<int> poyo; for (int u: a1) poyo.insert(u); hoge.insert(poyo); } else { uf.unite(a[i], b[i]); uf.unite(a[i], a1[1]); uf.unite(a[i], a2[1]); } } for (int u = 0; u < N; u++) if (uf.find(u)==u && uf.size(u) > 1) { int n = 0; for (int i = 0; i < M; i++) if (uf.find(a[i]) == u && uf.find(b[i]) == u) n++; ans = ans * c(n + K - 1, K - 1) % MOD; } for (set<int> poyo: hoge) if (true) { int n = poyo.size(); ll sum = 0; for (int d = 0; d < n; d++) { int k = gcd(n, d); ll x = 1; while (k--) x = x * K % MOD; sum = (sum + x) % MOD; } ans = ans * sum % MOD * mod_inverse(n, MOD) % MOD; } cout << ans << endl; }
Submission Info
Submission Time | |
---|---|
Task | F - Painting Graphs with AtCoDeer |
User | sugim48 |
Language | C++14 (GCC 5.4.1) |
Score | 1300 |
Code Size | 3694 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 | 2 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 | 3 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 | 3 ms | 256 KB |
1_039.txt | AC | 3 ms | 256 KB |
1_040.txt | AC | 3 ms | 256 KB |
1_041.txt | AC | 3 ms | 256 KB |
1_042.txt | AC | 3 ms | 256 KB |
1_043.txt | AC | 3 ms | 256 KB |
1_044.txt | AC | 2 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 | 3 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 | 3 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 |