题目描述
Einstein 学起了画画。
此人比较懒~~,他希望用最少的笔画画出一张画……
给定一个无向图,包含 nn 个顶点(编号 1 \sim n1∼n),mm 条边,求最少用多少笔可以画出图中所有的边。
输入格式
第一行两个整数 n, mn,m。
接下来 mm 行,每行两个数 a, ba,b(a \ne ba=b),表示 a, ba,b 两点之间有一条边相连。
一条边不会被描述多次。
输出格式
一个数,即问题的答案。
输入输出样例
5 5
2 3
2 4
2 5
3 4
4 5
1
说明/提示
对于 %50% 的数据,n≤50,m≤100。
对于 100% 的数据,1≤n≤1000,m≤10^5(不是异或)
CODE
#include <iostream>
using namespace std;
const int MAXN = 1001;
bool map[MAXN][MAXN];
int tmp1, tmp2, n, m;
int main(){
// 读入数据,转化为临接矩阵
cin >> n >> m;
for(int i=1; i<=m; i++){
cin >> tmp1 >> tmp2;
map[tmp1][tmp2] = true;
map[tmp2][tmp1] = true;
}
unsigned long long ans = 0;
for(int i=1; i<=n; i++){
unsigned int cnt = 0;
for(int j=1; j<=n; j++)
if(map[i][j])
cnt++;
if(cnt & 1)
ans++;
}
if(ans == 0) cout << 1 << endl;
else cout << ans / 2 << endl;
return 0;
}