题解 P1636 【Einstein学画画】
不说了,这次差点自闭
一开始循环里写的i=0,结果有一个点WA了,改成i=1开始那个点就AC了
然后有三个点RE,怎么也过不去。去群里问大佬,得出的结论是数组开小了或者没用cin(我寻思着cin不是比scanf慢吗)改了之后还是不行
又读了几遍代码,发现是第二个for里面i的停止条件写错了,应该是<=n,写成了<=m
核心思路:小学奥数的一笔画问题,有0个或者2个奇数边点的图形可以一笔画,然后后面是如果N(N为偶数)个奇数边点的话,需要N/2笔画
此题题解其实已经非常多了,我就把我的放上来做个参考吧
#include<cstdio>
#include<iostream>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cstring>
#include<string>
//气势磅礴的头文件
using namespace std;
int mp[11000],ans,n,m,a,b;//注意这里数组别开太小
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);//每次读入两个数
mp[a]++;//这一行和下一行是给对应的点加一个数(也就是这个节点的度数)
mp[b]++;
}
for(int i=1;i<=n;i++)
{
if(mp[i]%2)
ans++;
}
if(!ans)
puts("1");
else
printf("%d\n",ans/2);
return 0;
}