比赛 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;
}