QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#936792#10215. Gona Gunistd_abs (Bo-Ye Wu, Chung-Chun Huang, Po-Hsi Lin)#AC ✓1697ms682708kbC++173.8kb2025-03-15 23:59:222025-03-15 23:59:24

Judging History

This is the latest submission verdict.

  • [2025-03-15 23:59:24]
  • Judged
  • Verdict: AC
  • Time: 1697ms
  • Memory: 682708kb
  • [2025-03-15 23:59:22]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define pb push_back
#define all(a) a.begin(), a.end()
#define sz(a) ((int)a.size())
#ifdef ABS
void db() {}
template <typename T>
ostream& operator << (ostream &o, vector <T> vec) {
    o << "{"; int f = 0;
    for (T i : vec) o << (f++ ? " " : "") << i;
    return o << "}";
}
template <typename T, typename ...U> void db(T i, U ...j) { cerr << i << " ", db(j...); }
#define ppr(c, x...) cerr << "\e[1;" << c << "m", db(__LINE__, "[" + string(#x) + "]", x), cerr << "\e[0m" << endl
#define bug(x...) ppr(32, x)
#define bugv(x...) ppr(36, vector(x))
#define safe ppr(33, "safe")
#else
#define bug(x...) void(0)
#define bugv(x...) void(0)
#define safe void(0)
#endif
const int mod = 998244353, N = 300007, M = 205;

int add(int x, int y){
    x+=y; if(x>=mod) x-=mod;
    return x;
}
int sub(int x, int y){
    x-=y; if(x<0) x+=mod;
    return x;
}
int mul(int x, int y){
    return ((ll)x)*y%mod;
}
int Pow(int x, ll y=mod-2){
    int res=1;
    for(; y; x=mul(x,x),y>>=1) if(y&1) res=mul(res,x);
    return res;
}

int fac[M],inv[M],ifac[M];

int C(int n, int m){
    if(m<0||m>n) return 0;
    return mul(fac[n],mul(ifac[m],ifac[n-m]));
}

int m;

vector<int> add(vector<int> a, vector<int> b){
    vector<int> res(max(sz(a),sz(b)));
    for(int i=0; i<sz(a); ++i) res[i]=a[i];
    for(int i=0; i<sz(b); ++i) res[i]=add(res[i],b[i]);
    return res;
}
vector<int> sub(vector<int> a, vector<int> b){
    vector<int> res(max(sz(a),sz(b)));
    for(int i=0; i<sz(a); ++i) res[i]=a[i];
    for(int i=0; i<sz(b); ++i) res[i]=sub(res[i],b[i]);
    return res;
}
vector<int> mul(vector<int> a, vector<int> b){
    vector<int> res(min(sz(a)+sz(b)-1,m+1));
    for(int i=0; i<sz(a); ++i) for(int j=0; j<sz(b); ++j){
        if(i+j<sz(res)){
            res[i+j]=add(res[i+j],mul(a[i],b[j]));
        }
    }
    return res;
}

int n,pw[M],val[M];
vector<int> adj[N];
vector<int> dp[N][2],res;

void dfs(int u, int fa){
    dp[u][0]={1},dp[u][1]={0};
    for(auto v: adj[u]) if(v!=fa){
        dfs(v,u);
        vector<int> nw[2];
        nw[0]={0},nw[1]={0};
        nw[1]=add(nw[1],mul(dp[u][1],add(dp[v][0],dp[v][1])));
        nw[1]=add(nw[1],mul(mul(dp[u][0],vector<int>({1,1})),dp[v][0]));
        nw[0]=add(nw[0],mul(dp[u][0],dp[v][1]));
        //nw[0]=add(nw[0],dp[v][1]);
        //nw[1]=add(nw[1],mul(vector<int>({1,1}),dp[v][0]));
        dp[u][0]=add(dp[u][0],nw[0]);
        dp[u][1]=add(dp[u][1],nw[1]);
        //bug(u,v,dp[u][0],dp[u][1]);
    }
    for(int t: {0,1}){
        for(int i=0; i<sz(dp[u][t]); ++i){
            dp[u][t][i]=mul(dp[u][t][i],2);
        }
    }
    dp[u][0][0]=sub(dp[u][0][0],1);
    res=add(res,dp[u][0]);
    res=add(res,dp[u][1]);
    for(auto v: adj[u]) if(v!=fa){
        res=sub(res,mul(vector<int>({1,1}),dp[v][0]));
        res=sub(res,dp[v][1]);
    }
    //bug(u,dp[u][0],dp[u][1]);
}

void solve() {
    cin >> n >> m;
    for(int i=0; i<n; ++i) adj[i].clear();
    for(int i=0; i<n-1; ++i){
        int u,v; cin >> u >> v; u--,v--;
        adj[u].pb(v),adj[v].pb(u);
    }
    for(int i=0; i<=m; ++i){
        pw[i]=Pow(i,m);
    }
    for(int i=0; i<=m; ++i){
        val[i]=pw[i];
        for(int j=0; j<i; ++j) val[i]=sub(val[i],mul(val[j],C(i,j)));
    }
    res={0};
    dfs(0,-1);
    int tot=0;
    for(int i=0; i<sz(res); ++i) tot=add(tot,mul(res[i],val[i]));
    cout << tot << "\n";
}

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    fac[0]=inv[1]=ifac[0]=1;
    for(int i=1; i<M; ++i) fac[i]=mul(fac[i-1],i);
    for(int i=2; i<M; ++i) inv[i]=mul(inv[mod%i],mod-mod/i);
    for(int i=1; i<M; ++i) ifac[i]=mul(ifac[i-1],inv[i]);
    int t; cin >> t;
    while(t--) solve();
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 24876kb

input:

2
3 1
1 2
1 3
20 200
1 2
1 3
2 4
1 5
5 6
1 7
6 8
6 9
3 10
4 11
6 12
11 13
4 14
13 15
15 16
6 17
13 18
15 19
13 20

output:

4
286430678

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 575ms
memory: 117932kb

input:

1
300000 200
1 2
1 3
2 4
1 5
4 6
5 7
6 8
4 9
4 10
1 11
11 12
12 13
11 14
11 15
15 16
15 17
11 18
13 19
17 20
11 21
21 22
22 23
21 24
23 25
21 26
26 27
23 28
21 29
23 30
21 31
31 32
32 33
31 34
31 35
31 36
34 37
35 38
31 39
36 40
31 41
41 42
41 43
41 44
43 45
43 46
44 47
45 48
44 49
49 50
41 51
51 52...

output:

247999825

result:

ok single line: '247999825'

Test #3:

score: 0
Accepted
time: 396ms
memory: 24876kb

input:

3000
100 31
1 2
1 3
1 4
1 5
3 6
1 7
4 8
4 9
8 10
2 11
7 12
7 13
7 14
7 15
10 16
15 17
9 18
2 19
4 20
11 21
11 22
12 23
13 24
20 25
3 26
18 27
19 28
1 29
10 30
7 31
28 32
24 33
14 34
11 35
22 36
24 37
20 38
11 39
15 40
25 41
17 42
35 43
39 44
38 45
17 46
23 47
18 48
37 49
29 50
4 51
30 52
7 53
4 54
1...

output:

206703729
241517344
965256040
953191893
971103184
611763581
951769747
605254273
515657073
26158774
230121672
742384467
504292176
95015638
209242429
591984607
47728881
658540538
686302223
589359656
153765564
462000121
877695624
168867090
447225696
468677488
440776261
374615358
105981576
120340771
617...

result:

ok 3000 lines

Test #4:

score: 0
Accepted
time: 712ms
memory: 56876kb

input:

1
300000 200
1 2
2 3
1 4
2 5
5 6
4 7
5 8
8 9
3 10
2 11
10 12
12 13
4 14
6 15
6 16
7 17
13 18
3 19
13 20
18 21
5 22
22 23
20 24
24 25
24 26
9 27
25 28
5 29
5 30
20 31
21 32
24 33
7 34
22 35
32 36
30 37
26 38
30 39
39 40
24 41
37 42
28 43
37 44
16 45
27 46
7 47
16 48
38 49
7 50
29 51
47 52
4 53
31 54
...

output:

634171363

result:

ok single line: '634171363'

Test #5:

score: 0
Accepted
time: 1694ms
memory: 682708kb

input:

1
300000 200
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
21 22
22 23
23 24
24 25
25 26
26 27
27 28
28 29
29 30
30 31
31 32
32 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
49 50
50 51
51 5...

output:

378891816

result:

ok single line: '378891816'

Test #6:

score: 0
Accepted
time: 560ms
memory: 57132kb

input:

1
300000 200
1 2
1 3
2 4
2 5
3 6
3 7
4 8
4 9
5 10
5 11
6 12
6 13
7 14
7 15
8 16
8 17
9 18
9 19
10 20
10 21
11 22
11 23
12 24
12 25
13 26
13 27
14 28
14 29
15 30
15 31
16 32
16 33
17 34
17 35
18 36
18 37
19 38
19 39
20 40
20 41
21 42
21 43
22 44
22 45
23 46
23 47
24 48
24 49
25 50
25 51
26 52
26 53
2...

output:

435358080

result:

ok single line: '435358080'

Test #7:

score: 0
Accepted
time: 973ms
memory: 53456kb

input:

1
300000 200
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 55
1 56
1 57
1 58
1 59
1 60
...

output:

220992079

result:

ok single line: '220992079'

Test #8:

score: 0
Accepted
time: 1697ms
memory: 626856kb

input:

1
300000 200
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
21 22
22 23
23 24
24 25
25 26
26 27
27 28
28 29
29 30
30 31
31 32
32 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
49 50
50 51
51 5...

output:

872442796

result:

ok single line: '872442796'

Test #9:

score: 0
Accepted
time: 1083ms
memory: 376364kb

input:

1
300000 200
1 2
1 3
3 4
3 5
5 6
5 7
7 8
7 9
9 10
9 11
11 12
11 13
13 14
13 15
15 16
15 17
17 18
17 19
19 20
19 21
21 22
21 23
23 24
23 25
25 26
25 27
27 28
27 29
29 30
29 31
31 32
31 33
33 34
33 35
35 36
35 37
37 38
37 39
39 40
39 41
41 42
41 43
43 44
43 45
45 46
45 47
47 48
47 49
49 50
49 51
51 52...

output:

77589834

result:

ok single line: '77589834'

Test #10:

score: 0
Accepted
time: 686ms
memory: 182568kb

input:

1
300000 200
1 2
1 3
2 4
1 5
1 6
6 7
6 8
8 9
9 10
6 11
11 12
11 13
13 14
11 15
11 16
16 17
17 18
17 19
18 20
16 21
21 22
22 23
22 24
24 25
21 26
26 27
26 28
26 29
27 30
26 31
31 32
31 33
33 34
31 35
31 36
36 37
37 38
36 39
39 40
36 41
41 42
42 43
42 44
44 45
41 46
46 47
46 48
46 49
48 50
46 51
51 52...

output:

137591617

result:

ok single line: '137591617'

Test #11:

score: 0
Accepted
time: 618ms
memory: 57260kb

input:

1
300000 200
1 2
1 3
2 4
1 5
4 6
5 7
6 8
4 9
4 10
3 11
8 12
1 13
7 14
8 15
14 16
7 17
7 18
16 19
3 20
12 21
13 22
9 23
13 24
18 25
10 26
11 27
12 28
13 29
15 30
22 31
23 32
8 33
4 34
16 35
13 36
24 37
6 38
27 39
7 40
39 41
37 42
10 43
37 44
40 45
9 46
16 47
7 48
24 49
34 50
45 51
46 52
43 53
53 54
5...

output:

529039223

result:

ok single line: '529039223'

Extra Test:

score: 0
Extra Test Passed