经测试已经ac了

搬砖的  •  5小时前


include

include

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;

}


评论:

请先登录,才能进行评论