题目
思路
判定欧拉图
所有的点度为偶数
且连通分量为1,判定连通分量用DFS(BFS也可
代码
#include<iostream>
#include<vector>
using namespace std;
#include<cstring>
int dot[2000];
int mark[2000];
vector<int>edge[2000];
void dfs(int x)
{
if(mark[x]) return;
mark[x] = true;
for(auto data : edge[x])
dfs(data);
}
int main()
{
memset(dot, 0, sizeof(dot));
memset(mark, 0, sizeof(mark));
int N,M;
cin >> N >> M;
for(int i = 0; i < M; i++)
{
int a,b;
cin >> a >> b;
edge[a].push_back(b);
dot[a]++; dot[b]++;
}
dfs(1);
int odd = 0;
int flag = 0;
for(int i = 1; i <= N; i++)
{
if(dot[i]%2)
odd++;
if(!mark[i])
flag = 1;
}
if(odd ||flag)
cout << "0";
else
cout << "1";
}