• hiho一下 第四十九周 欧拉路


    http://hihocoder.com/contest/hiho49/problem/1

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

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

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

    那么首先判断图连通,然后统计度为奇数的点是否是2个,或者0个(0个就是欧拉回路)。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 #include <vector>
     5 #include <cstring>
     6 #include <string>
     7 #include <algorithm>
     8 #include <string>
     9 #include <set>
    10 #include <functional>
    11 #include <numeric>
    12 #include <sstream>
    13 #include <stack>
    14 #include <map>
    15 #include <queue>
    16 //#pragma comment(linker, "/STACK:102400000,102400000")
    17 #define CL(arr, val)    memset(arr, val, sizeof(arr))
    18 
    19 #define ll long long
    20 #define inf 0x7f7f7f7f
    21 #define lc l,m,rt<<1
    22 #define rc m + 1,r,rt<<1|1
    23 #define pi acos(-1.0)
    24 
    25 #define L(x)    (x) << 1
    26 #define R(x)    (x) << 1 | 1
    27 #define MID(l, r)   (l + r) >> 1
    28 #define Min(x, y)   (x) < (y) ? (x) : (y)
    29 #define Max(x, y)   (x) < (y) ? (y) : (x)
    30 #define E(x)        (1 << (x))
    31 #define iabs(x)     (x) < 0 ? -(x) : (x)
    32 #define OUT(x)  printf("%I64d
    ", x)
    33 #define lowbit(x)   (x)&(-x)
    34 #define Read()  freopen("a.txt", "r", stdin)
    35 #define Write() freopen("b.txt", "w", stdout);
    36 #define maxn 310
    37 #define maxv 10010
    38 #define mod 1000000000
    39 using namespace std;
    40 
    41 vector<int>g[maxv];
    42 int vis[maxv],in[maxv];
    43 int n,m;
    44 
    45 void dfs(int u)
    46 {
    47     vis[u]=1;
    48     for(int i=0;i<g[u].size();i++)
    49     {
    50         if(!vis[g[u][i]]) dfs(g[u][i]);
    51     }
    52 }
    53 int main()
    54 {
    55    // Read();
    56     int u,v;
    57     scanf("%d%d",&n,&m);
    58     memset(in,0,sizeof(in));
    59     for(int i=1;i<=m;i++)
    60     {
    61         scanf("%d%d",&u,&v);
    62         g[u].push_back(v);
    63         g[v].push_back(u);
    64         in[u]++;
    65         in[v]++;
    66     }
    67     memset(vis,0,sizeof(vis));
    68     bool flag=0;
    69     dfs(1);
    70     int ans=0;
    71     for(int i=1;i<=n;i++)
    72     {
    73         if(!vis[i])
    74         {
    75             flag=1;
    76         }
    77         if(in[i]%2!=0) ans++;
    78     }
    79     //printf("%d
    ",ans);
    80     if(flag||(ans!=2&&ans!=0)) printf("Part
    ");
    81     else printf("Full
    ");
    82     return 0;
    83 }
  • 相关阅读:
    pcr的简单小脚本
    Q宠大乐斗自动玩
    Docker安装elsearch
    elasticserarch6.5.0百度云资源
    rabbitmq安装
    排序后分组取每个分组的第一条数据
    Lambda表达式的简单使用
    解决SpringBoot总是找不到jsp
    Java强转类型时报错
    iOS内购图文流程(2017)
  • 原文地址:https://www.cnblogs.com/nowandforever/p/4573670.html
Copyright © 2020-2023  润新知