搬砖的 • 5小时前
using namespace std;
typedef long long ll; const int MAXN = 100005;
int fa[MAXN], sz[MAXN];
int find(int x) {
if (fa[x] != x) fa[x] = find(fa[x]);
return fa[x];
}
ll qpow(ll base, ll exp, ll mod) {
ll res = 1;
base %= mod;
while (exp > 0)
{
if (exp & 1) res = res * base % mod;
base = base * base % mod;
exp >>= 1;
}
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m; ll k;
cin >> n >> m >> k;
for (int i = 1; i <= n; ++i)
{
fa[i] = i;
sz[i] = 1;
}
for (int i = 0; i < m; ++i)
{
int a, b;
cin >> a >> b;
int ra = find(a), rb = find(b);
if (ra != rb)
{
fa[rb] = ra;
sz[ra] += sz[rb];
}
}
vector<bool> vis(n+1, false);
int cnt = 0;
ll mul = 1;
for (int i = 1; i <= n; ++i)
{
int root = find(i);
if (!vis[root])
{
vis[root] = true;
cnt ++;
mul = mul * sz[root] % k;
}
}
if (cnt == 1)
{
cout << (1 % k) << endl;
}
else
{
ll p = qpow(n, cnt - 2, k);
ll ans = mul * p % k;
cout << ans << endl;
}
return 0;
}
评论:
请先登录,才能进行评论