• 欧拉路径 基础题 hiho第49周


    题目链接:hiho 第49周

    思路:

    定义给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路。

    性质:

     1: 一个无向图存在欧拉路当且仅当该图是连通的且有且只有2个点的度数是奇数,此时这两个点只能作为欧拉路径的起点和终点。

     2: 若图中没有奇数度的点,那么起点和终点一定是同一个点,这样的欧拉路叫做欧拉回路

    利用性质做题就好了,具体的模拟hiho讲的非常清楚了

    /**************************************************************
        Problem:hiho 49
        User: youmi
        Language: C++
        Result: Accepted
        Time:16ms
        Memory:1MB
    ****************************************************************/
    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    //#include<bits/stdc++.h>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <stack>
    #include <sstream>
    #include <cmath>
    #include <queue>
    #include <string>
    #include <vector>
    #define zeros(a) memset(a,0,sizeof(a))
    #define ones(a) memset(a,-1,sizeof(a))
    #define sc(a) scanf("%d",&a)
    #define sc2(a,b) scanf("%d%d",&a,&b)
    #define rep0(i,n) for(int i=0;i<n;i++)
    #define rep1(i,n) for(int i=1;i<=n;i++)
    #define pt(a) printf("%d
    ",a)
    #define lson (step<<1)
    #define rson (lson+1)
    #define esp 1e-6
    #define oo 0x3fffffff
    #define TEST cout<<"*************************"<<endl
    
    using namespace std;
    typedef long long ll;
    
    int n,m;
    
    const int maxn=10000+10;
    const int maxm=50000+10;
    int head[maxn],deg[maxn];
    struct side
    {
        int v,next;
    }e[maxm<<1];
    int T;
    void build(int u,int v)
    {
        e[T].v=v;
        e[T].next=head[u];
        head[u]=T++;
    }
    bool vis[maxn];
    int cnt;
    void dfs(int u)//判断是否联通
    {
        vis[u]=1;
        cnt++;
        for(int i=head[u];~i;i=e[i].next)
        {
            int v=e[i].v;
            if(!vis[v])
            {
                dfs(v);
            }
        }
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(~sc2(n,m))
        {
            int u,v;
            zeros(deg);
            ones(head);
            T=0;
            rep0(i,m)
            {
                sc2(u,v);
                deg[u]++;
                deg[v]++;
                build(u,v);
                build(v,u);
            }
            int tot=0;
            for(int i=1;i<=n;i++)
            {
                    if(deg[i]%2)
                        tot++;
            }
            cnt=0;
            zeros(vis);
            dfs(1);
            if((tot==2||tot==0)&&cnt==n)
                printf("Full
    ");
            else
                printf("Part
    ");
        }
        return 0;
    }
    不为失败找借口,只为成功找方法
  • 相关阅读:
    泛社交泛泛之交也很重要
    iOS 切后台挂机
    iOS 导航栏translucent用法
    iOS 中UIButton中文字换行
    iOS 给UIimageView添加UITapGestureRecognizer手势点击事件
    iOS15UITableView多了白条,导航栏和Tabbar变成白色和标题变黑处理总结属性变化和原来基本的导航栏属性总结记录(看到就更新)
    iOS延时定时功能
    iOS uiview添加背景图案
    iOS 导航栏返回把样式带回前面怎么办
    iOS 识别图片二维码demo,复制粘贴即用
  • 原文地址:https://www.cnblogs.com/youmi/p/4603478.html
Copyright © 2020-2023  润新知