摘要:最近是不适合写代码么?忘记初始化wa到死<_=_=_>。唔--最近在学习图论,从基础搞起,先搞了拓扑排序和欧拉(回)路。
Part 0. 拓扑排序
==挖坑==
Part 1. 欧拉(回)路
先判连通性
欧拉回路:
- 有向图:每个顶点入度等于出度
- 无向图:每个顶点度数都为偶数
欧拉路:
- 有向图:每个顶点入度等于出度,或者,一个顶点入度比出度大一,一个顶点入度比出度小一(起点),其余顶点入度等于出度
- 无向图:每个顶点度数都为偶数,或者,只有两个顶点度数为奇数
HDU 3018 Ant Trip 注意hint
哇~我要贴错误代码啦~~说不定还能坑一下自己~_~
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
路径什么的待补~~~~~
==end==