提出 #73694383
ソースコード 拡げる
#include<bits/stdc++.h>
#include"atcoder/all"
using namespace std;
using namespace atcoder;
#define int long
int inf = 2000000000000000000;
struct UnionFind {
vector<int> par; // par[i]:iの親の番号 (例) par[3] = 2 : 3の親が2
UnionFind(int N) : par(N) { //最初は全てが根であるとして初期化
for(int i = 0; i < N; i++) par[i] = i;
}
int root(int x) { // データxが属する木の根を再帰で得る:root(x) = {xの木の根}
if (par[x] == x) return x;
return par[x] = root(par[x]);
}
void unite(int x, int y) { // xとyの木を併合
int rx = root(x); //xの根をrx
int ry = root(y); //yの根をry
if (rx == ry) return; //xとyの根が同じ(=同じ木にある)時はそのまま
par[rx] = ry; //xとyの根が同じでない(=同じ木にない)時:xの根rxをyの根ryにつける
}
bool same(int x, int y) { // 2つのデータx, yが属する木が同じならtrueを返す
int rx = root(x);
int ry = root(y);
return rx == ry;
}
};
signed main(){
int n,m;cin>>n>>m;
UnionFind g(n+1);
int kosu=n;
int u[m],v[m],c[m];
c[0]=2;
for(int i=0;i<m;i++){
cin>>u[i]>>v[i];
if(i!=0){
c[i]=(2*c[i-1])%998244353;
}
}
int ans=0;
for(int i=m-1;i>=0;i--){
if(g.root(u[i])==g.root(v[i]) || kosu>2){
if(g.root(u[i])!=g.root(v[i]))kosu--;
g.unite(u[i],v[i]);
}else{
ans = (ans + c[i])%998244353;
}
}
cout<<ans<<"\n";
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Divide Graph |
| ユーザ | Sabakanmelm |
| 言語 | C++23 (GCC 15.2.0) |
| 得点 | 475 |
| コード長 | 1674 Byte |
| 結果 | AC |
| 実行時間 | 69 ms |
| メモリ | 9564 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 475 / 475 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 02_perfect_00.txt, 02_perfect_01.txt, 02_perfect_02.txt, 02_perfect_03.txt, 02_perfect_04.txt, 02_perfect_05.txt, 02_perfect_06.txt, 02_perfect_07.txt, 02_perfect_08.txt, 03_tree_00.txt, 03_tree_01.txt, 03_tree_02.txt, 03_tree_03.txt, 03_tree_04.txt, 03_tree_05.txt, 03_tree_06.txt, 04_handmade_00.txt, 04_handmade_01.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 1 ms | 3412 KiB |
| 00_sample_01.txt | AC | 1 ms | 3396 KiB |
| 00_sample_02.txt | AC | 1 ms | 3576 KiB |
| 01_random_00.txt | AC | 45 ms | 7636 KiB |
| 01_random_01.txt | AC | 40 ms | 7144 KiB |
| 01_random_02.txt | AC | 34 ms | 6636 KiB |
| 01_random_03.txt | AC | 4 ms | 3704 KiB |
| 01_random_04.txt | AC | 41 ms | 7520 KiB |
| 01_random_05.txt | AC | 37 ms | 6492 KiB |
| 01_random_06.txt | AC | 30 ms | 5748 KiB |
| 01_random_07.txt | AC | 29 ms | 5920 KiB |
| 01_random_08.txt | AC | 44 ms | 6996 KiB |
| 01_random_09.txt | AC | 31 ms | 5936 KiB |
| 01_random_10.txt | AC | 67 ms | 9180 KiB |
| 01_random_11.txt | AC | 66 ms | 9176 KiB |
| 01_random_12.txt | AC | 69 ms | 9440 KiB |
| 01_random_13.txt | AC | 44 ms | 7272 KiB |
| 01_random_14.txt | AC | 59 ms | 8656 KiB |
| 02_perfect_00.txt | AC | 46 ms | 8224 KiB |
| 02_perfect_01.txt | AC | 46 ms | 8304 KiB |
| 02_perfect_02.txt | AC | 46 ms | 8300 KiB |
| 02_perfect_03.txt | AC | 46 ms | 8168 KiB |
| 02_perfect_04.txt | AC | 46 ms | 8148 KiB |
| 02_perfect_05.txt | AC | 46 ms | 8364 KiB |
| 02_perfect_06.txt | AC | 46 ms | 8312 KiB |
| 02_perfect_07.txt | AC | 46 ms | 8304 KiB |
| 02_perfect_08.txt | AC | 46 ms | 8276 KiB |
| 03_tree_00.txt | AC | 67 ms | 9544 KiB |
| 03_tree_01.txt | AC | 68 ms | 9420 KiB |
| 03_tree_02.txt | AC | 65 ms | 9552 KiB |
| 03_tree_03.txt | AC | 68 ms | 9560 KiB |
| 03_tree_04.txt | AC | 68 ms | 9556 KiB |
| 03_tree_05.txt | AC | 68 ms | 9564 KiB |
| 03_tree_06.txt | AC | 68 ms | 9420 KiB |
| 04_handmade_00.txt | AC | 1 ms | 3552 KiB |
| 04_handmade_01.txt | AC | 65 ms | 9564 KiB |