• 拓扑排序&&欧拉(回)路


    摘要:最近是不适合写代码么?忘记初始化wa到死<_=_=_>。唔--最近在学习图论,从基础搞起,先搞了拓扑排序和欧拉(回)路。

    Part 0. 拓扑排序

      ==挖坑==

    Part 1. 欧拉(回)路

    先判连通性

    欧拉回路:

    1.  有向图:每个顶点入度等于出度
    2.  无向图:每个顶点度数都为偶数

    欧拉路:

    1.  有向图:每个顶点入度等于出度,或者,一个顶点入度比出度大一,一个顶点入度比出度小一(起点),其余顶点入度等于出度
    2.  无向图:每个顶点度数都为偶数,或者,只有两个顶点度数为奇数

    HDU 3018 Ant Trip  注意hint

      哇~我要贴错误代码啦~~说不定还能坑一下自己~_~

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <cstring>
     4 #include <algorithm>
     5 #include <vector>
     6 #include <queue>
     7 #include <map>
     8 using namespace std ;
     9 #define rep(i,n) for (int i = 1 ; i <= n ; ++ i)
    10 #define lson (i<<1)
    11 #define rson (i<<1|1)
    12 const int maxn = 100010 ;
    13 vector<int> G[maxn] ;
    14 int N , R , du[maxn] , cnt , fa[maxn] , num ;
    15 bool vis[maxn] ;
    16 
    17 void dfs(int rt)
    18 {
    19     if (vis[rt]) return ;
    20     num ++ ;
    21     cnt += (du[rt]&1) ;
    22     vis[rt] = true ;
    23     int v ;
    24     for (int i = 0 ; i < G[rt].size() ; ++ i) {
    25         v = G[rt][i] ;
    26         if (v != fa[rt]) {
    27             fa[v] = rt ;
    28             dfs(v) ;
    29         }
    30     }
    31 }
    32 
    33 int main()
    34 {
    35     int u , v ;
    36     while (scanf("%d%d",&N,&R) == 2) {
    37         memset(vis,false,sizeof(vis)) ;
    38         memset(fa,-1,sizeof(fa)) ;
    39         rep(i,N) G[i].clear() ;
    40         rep(i,R) {
    41             scanf("%d%d",&u,&v) ;
    42             du[u] ++ , du[v] ++ ;
    43             G[u].push_back(v) ;
    44             G[v].push_back(u) ;
    45         }
    46         int ans = 0 ;
    47         rep(i,N) {
    48             if (!vis[i]) {
    49                 fa[i] = -1 ;
    50                 cnt = num = 0 ;
    51                 dfs(i) ;
    52                 if (num == 1) continue ;
    53                 if (cnt == 0) ans ++ ;
    54                 else ans += (cnt/2) ;
    55             }
    56         }
    57         printf("%d
    ",ans) ;
    58     }
    59     return 0 ;
    60 }
    haha

     路径什么的待补~~~~~

    ==end==

  • 相关阅读:
    45.如何优雅的删除一张大表?
    13.安装上传和下载文件
    12.yum install 和yum localinstall区别
    7.Mysql之MGR环境搭建
    mod运算
    取整
    同余式
    Windows下的重定向
    C语言求正负余数
    复利计算公式
  • 原文地址:https://www.cnblogs.com/smile-0/p/5417525.html
Copyright © 2020-2023  润新知