QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#668224#5437. Graph CompletingocharinWA 2ms3832kbC++203.0kb2024-10-23 12:42:572024-10-23 12:42:57

Judging History

你现在查看的是最新测评结果

  • [2024-10-23 12:42:57]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:3832kb
  • [2024-10-23 12:42:57]
  • 提交

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'