题解 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;
}