QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#936792 | #10215. Gona Guni | std_abs (Bo-Ye Wu, Chung-Chun Huang, Po-Hsi Lin)# | AC ✓ | 1697ms | 682708kb | C++17 | 3.8kb | 2025-03-15 23:59:22 | 2025-03-15 23:59:24 |
Judging History
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