QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#129693 | #4540. Counting Stickmen | batrr# | AC ✓ | 582ms | 39724kb | C++17 | 2.1kb | 2023-07-22 22:11:42 | 2023-07-22 22:11:44 |
Judging History
answer
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
const int N = 300500, inf = 1e9, mod = 998244353;
const ll INF = 1e18;
int sum(int a, int b) {
a += b;
if (a >= mod)
a -= mod;
return a;
}
int sub(int a, int b) {
a -= b;
if (a < 0)
a += mod;
return a;
}
int mult(int a, int b) {
return 1ll * a * b % mod;
}
int bp(int a, int b) {
int res = 1;
while (b) {
if (b & 1)
res = mult(res, a);
a = mult(a, a);
b >>= 1;
}
return res;
}
int inv(int x) {
return bp(x, mod - 2);
}
int n;
const int maxN = 5e5 + 10;
vector<int> g[maxN];
int deg[maxN];
int S[16];
int D[4];
void solve() {
cin >> n;
for (int i = 1; i <= n; i++) {
deg[i] = 0;
g[i].clear();
}
for (int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
g[a].emplace_back(b);
g[b].emplace_back(a);
deg[a]++;
deg[b]++;
}
const int inv2 = (mod + 1) / 2;
int ANS = 0;
for (int i = 1; i <= n; i++) {
if ((int)g[i].size() < 4) continue;
memset(S, 0, sizeof S);
S[0] = 1;
for (int to : g[i]) {
D[0] = 1;
D[1] = deg[to] - 1;
D[2] = deg[to] - 1;
D[3] = mult(inv2, mult(deg[to] - 1, deg[to] - 2));
for (int z = 15; z >= 0; z--) {
for (int bit = 0; bit < 4; bit++) {
if (!(z & (1 << bit))) {
S[z ^ (1 << bit)] = sum(S[z ^ (1 << bit)], mult(S[z], D[bit]));
}
}
}
}
ANS = sum(ANS, mult(S[15], inv2));
}
cout << ANS << '\n';
}
int main() {
#ifdef DEBUG
freopen("input.txt", "r", stdin);
#endif
ios_base::sync_with_stdio(false);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++) {
// cout << "Case #" << i << endl;
solve();
}
}
详细
Test #1:
score: 100
Accepted
time: 582ms
memory: 39724kb
input:
15 9 1 2 2 3 3 4 2 5 5 6 2 7 7 8 7 9 9999 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1...
output:
1 311255965 672169659 323323769 834196165 147532751 608867683 433545054 268282647 580524749 250163191 0 876200211 781358751 903681473
result:
ok 15 lines