比赛 |
NOIP水题赛2 |
评测结果 |
AAAAAAAAAA |
题目名称 |
AACB(无题面) |
最终得分 |
100 |
用户昵称 |
胡嘉兴 |
运行时间 |
1.065 s |
代码语言 |
C++ |
内存使用 |
12.84 MiB |
提交时间 |
2018-11-03 16:19:36 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 5e5+7, mod = 998244353;
int ans, p[N], du[N];
vector<pair<int, int> > vec[N];
void add(int & a, int b)
{
a += b;
if(a>=mod)
{
a -= mod;
}
return;
}
int find(int x)
{
return x == p[x] ? x : p[x] = find(p[x]);
}
void dfs(int x, int fa)
{
for(int i = 0; i < vec[x].size(); i++)
{
int y = vec[x][i].first;
if(y!=fa)
{
dfs(y, x);
if(du[y]&1)
{
du[x] ^= 1;
du[y] ^= 1;
add(ans, vec[x][i].second);
}
}
}
return;
}
int main()
{
int n, m, c = 1;
freopen("AACB.in", "r", stdin);
freopen("AACB.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
p[i] = i;
}
for(int i = 1; i <= m; i++)
{
int u, v;
scanf("%d%d", &u, &v);
add(c, c);
add(ans, c);
du[u] ^= 1;
du[v] ^= 1;
int fu = find(u), fv = find(v);
if(fu!=fv)
{
p[fu] = fv;
vec[u].push_back(make_pair(v, c));
vec[v].push_back(make_pair(u, c));
}
}
dfs(1, 0);
printf("%d\n", ans);
return 0;
}