NYOJ 42 一笔画问题

来源:互联网 发布:淘宝东大门代购哪家好 编辑:程序博客网 时间:2024/06/03 00:05

这题开始以为很水。判断一下每个点的奇偶就可以了,只存在两个点是奇点,就是起点和终点。

提交了WA了。后来思考是不是要每个点都要连通。DFS来了一次。AC了。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int u[1001];bool vis[1001][1001];bool g[1001][1001];bool v[1001];int n,m;void dfs(int i){    for(int j=1;j<=n;j++)    {        if(g[i][j]&&!vis[i][j])        {            vis[i][j]=vis[j][i]=1;            v[i]=v[j]=1;            dfs(j);        }    }}int main(){    int t;    cin>>t;    while(t--)    {        cin>>n>>m;        int a,b;        bool ok=0;        memset(u,0,sizeof(u));        memset(vis,0,sizeof(vis));        memset(g,0,sizeof(g));        memset(v,0,sizeof(v));        for(int i=0;i<m;i++)        {            scanf("%d%d",&a,&b);            u[a]++,u[b]++;            g[a][b]=g[b][a]=1;        }        int num=0;        for(int i=1;i<=n;i++)        {            if(u[i]&1)num++;            if(num>2){ok=1;break;}        }        if(ok){printf("No\n");continue;}        else        {            dfs(1);            for(int i=1;i<=n;i++)            if(!v[i]){ok=1;break;}        }        if(ok)printf("No\n");        else printf("Yes\n");    }}


0 0
原创粉丝点击