1. 程式人生 > 其它 >洛谷P1636 Einstein學畫畫(圖論)

洛谷P1636 Einstein學畫畫(圖論)

題目描述

Einstein 學起了畫畫。

此人比較懶~~,他希望用最少的筆畫畫出一張畫……

給定一個無向圖,包含n個頂點(編號1 \sim n),m條邊,求最少用多少筆可以畫出圖中所有的邊。

輸入格式

第一行兩個整數n, m

接下來m行,每行兩個數a, ba \ne b),表示a, b兩點之間有一條邊相連。

一條邊不會被描述多次。

輸出格式

一個數,即問題的答案。

輸入輸出樣例

輸入 #1
5 5
2 3
2 4
2 5
3 4
4 5
輸出 #1
1

說明/提示

對於 %的資料,

對於 的資料,

n1000,m≤10^5(不是異或)

#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;
}