QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#668224 | #5437. Graph Completing | ocharin | WA | 2ms | 3832kb | C++20 | 3.0kb | 2024-10-23 12:42:57 | 2024-10-23 12:42:57 |
Judging History
answer
/*
_/ _/
_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/_/ _/_/_/
_/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/
_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
_/_/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/ _/
*/
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
void solve(){
int n,m;
cin>>n>>m;
vector<int>p(n+1),pp(n+1);
auto cal=[&](int x)->int{
return p[x%n]*pp[x/n]%mod;
};
p[0]=pp[0]=1;
for(int i=1;i<=n;++i) p[i]=p[i-1]*2%mod;
for(int i=1;i<=n;++i) pp[i]=pp[i]*p[n]%mod;
vector<int>head(n,-1),to(2*m),nxt(2*m,-1);
int cnt=-1;
auto add=[&](int u,int v)->void{
to[++cnt]=v;
nxt[cnt]=head[u];
head[u]=cnt;
};
for(int i=0;i<m;++i){
int u,v;
cin>>u>>v;
--u,--v;
add(u,v);
add(v,u);
}
vector<int>dfn(n),low(n);
int idx=0;
stack<int>st;
vector<int>id(n);
auto tarjan=[&](auto tarjan,int u,int in)->void{
dfn[u]=low[u]=++cnt;
st.push(u);
for(int i=head[u];~i;i=nxt[i]){
int v=to[i];
if(!dfn[v]){
tarjan(tarjan,v,i^1);
low[u]=min(low[u],low[v]);
}
else if(i!=in) low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
int x=st.top();st.pop();
id[x]=idx;
while(x!=u){
x=st.top();st.pop();
id[x]=idx;
}
idx++;
}
};
tarjan(tarjan,0,-1);
vector<int>sz(idx),c(idx);
vector<vector<int>>e(idx);
for(int i=0;i<n;++i){
int u=id[i];
sz[u]++;
for(int j=head[i];~j;j=nxt[j]){
int v=id[to[j]];
if(u!=v) e[u].push_back(v);
else c[u]++;
}
}
vector f(idx,vector(n+1,0ll));
auto dfs=[&](auto dfs,int u,int fa)->void{
f[u][sz[u]]=cal((sz[u]-1)*sz[u]/2-c[u]/2);
for(auto v:e[u]){
if(v==fa) continue;
dfs(dfs,v,u);
vector<int>g(sz[u]+sz[v]+1,0ll);
for(int i=0;i<=sz[u];++i){
for(int j=0;j<=sz[v];++j){
g[i+j]+=f[u][i]*f[v][j]%mod*cal(i*j-1)%mod;
if(g[i+j]>=mod) g[i+j]-=mod;
g[i]+=mod-f[u][i]*f[v][j]%mod;
if(g[i]>=mod) g[i]-=mod;
}
}
swap(f[u],g);
sz[u]+=sz[v];
}
};
dfs(dfs,0,-1);
int res=0;
for(int i=0;i<=n;++i){
res+=f[0][i];
// cerr<<f[0][i]<<endl;
if(res>=mod) res-=mod;
}
cout<<res<<"\n";
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
solve();
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3624kb
input:
3 2 1 2 2 3
output:
1
result:
ok 1 number(s): "1"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3532kb
input:
4 4 1 2 2 3 3 4 4 1
output:
4
result:
ok 1 number(s): "4"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3832kb
input:
2 1 1 2
output:
0
result:
ok 1 number(s): "0"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3592kb
input:
3 3 1 2 2 3 3 1
output:
1
result:
ok 1 number(s): "1"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3756kb
input:
4 3 1 2 2 3 3 4
output:
5
result:
ok 1 number(s): "5"
Test #6:
score: 0
Accepted
time: 0ms
memory: 3624kb
input:
4 3 1 2 1 3 1 4
output:
4
result:
ok 1 number(s): "4"
Test #7:
score: 0
Accepted
time: 0ms
memory: 3604kb
input:
4 5 1 2 2 3 3 4 4 1 1 3
output:
2
result:
ok 1 number(s): "2"
Test #8:
score: 0
Accepted
time: 0ms
memory: 3828kb
input:
4 6 1 2 2 3 3 4 4 1 1 3 2 4
output:
1
result:
ok 1 number(s): "1"
Test #9:
score: 0
Accepted
time: 1ms
memory: 3520kb
input:
141 9870 124 111 31 87 121 106 127 90 54 125 38 17 115 23 129 111 8 116 90 85 10 29 96 110 24 125 51 113 119 33 58 64 8 5 54 97 112 44 70 138 116 85 38 138 138 21 26 18 69 128 68 31 69 42 126 110 49 118 83 124 69 4 9 110 88 104 48 53 46 30 111 120 99 85 13 85 73 85 40 124 39 38 121 40 46 100 29 61 4...
output:
1
result:
ok 1 number(s): "1"
Test #10:
score: 0
Accepted
time: 1ms
memory: 3784kb
input:
142 10000 19 3 4 86 36 122 36 88 130 86 107 59 3 119 132 90 80 124 122 95 75 66 70 123 63 119 8 44 114 9 81 19 106 77 96 93 79 141 104 50 117 66 30 48 128 109 56 73 106 116 70 8 72 130 59 110 140 20 40 11 134 71 27 51 33 93 82 96 133 118 50 14 32 64 71 12 48 33 22 32 116 17 104 45 66 71 111 142 131 ...
output:
2048
result:
ok 1 number(s): "2048"
Test #11:
score: -100
Wrong Answer
time: 2ms
memory: 3664kb
input:
200 10000 47 42 33 120 146 144 94 170 170 181 20 101 185 190 197 33 18 37 12 86 148 115 136 120 41 182 120 11 44 132 167 67 118 139 114 52 80 37 171 56 93 139 113 112 129 122 166 4 47 60 57 6 104 119 179 104 107 1 8 70 197 70 39 127 134 1 18 26 85 100 158 121 61 105 33 113 51 54 45 85 45 130 97 164 ...
output:
0
result:
wrong answer 1st numbers differ - expected: '365281854', found: '0'