HDU 3018 Ant Trip(尤拉路的條數)

2021-08-08 03:54:53 字數 1361 閱讀 6955

題目位址

題意:告訴你乙個無向圖,問你要一筆畫多少次才能把所有邊都畫一遍,且每條邊僅畫一遍。

思路:如果你還沒有理解或者不知道尤拉圖的概念的話,可以看我的另一篇部落格:傳送門,那裡詳細的講了有向圖無向圖的尤拉圖的概念。言歸正傳,這題其實也是一道裸的尤拉鏈路的題目,他其實一筆畫就是要找到邊能全部連起來,然後我們就會發現有以下幾種情況:

乙個孤立的點

一條尤拉迴路(每個點的度都是偶數)

一條尤拉鏈路(有兩個點的度為奇數)

多條尤拉路徑(有多個點的度為奇數)

3和4的情況可以結合起來看。直接對奇數的點的個數除二就好了。然後聯通塊的區分就用並查集去維護就好了。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define n 100010

#define m 200010

#define inf 0x3f3f3f3f

using

namespace

std;

const ll mod = 998244353;

const

double eps = 1e-9;

int deg[n];//每個點的度數

int pre[n], n;

int num[n];

bool vis[n];

vector

v;int find(int x)

return pre[x] = find(pre[x]);

}void union(int a, int b)

}void init()

v.clear();

memset(num, 0, sizeof(num));

memset(vis, false, sizeof(vis));

memset(deg, 0, sizeof(deg));

}int main()

for (int i = 1; i <= n; i++)

if (deg[i] & 1) num[a]++;//記錄有多少個寄度節點

}int ans = 0;

for (int i = 0; i < v.size(); i++)

cout

<< ans << endl;

}return

0;}

尤拉路徑 hdu 3018 Ant Trip

給定乙個無向圖,每條邊只走一次,可以有多個出發點,最多要多少個出發點?不考慮孤立點 即找至少需要多少個尤拉路徑 首先判斷聯通分量。再在每個連通分量中,奇數度點個數為0,需要出發點1個 尤拉迴路 奇數度點位非0個 記為cnt 需要出發點cnt 2個 乙個連通圖 無向圖 中,奇數度點的個數為偶數個。證明...

HDU 3018 Ant Trip 尤拉迴路

一筆畫問題,問需要多少筆才能把邊畫完,如果乙個連通分量是尤拉迴路 所有點的度數都是偶數,對於無向圖來說 那麼這個連通分量可以一筆畫完,如果乙個連通分量不是尤拉迴路,那麼需要的筆畫數是這個連通分量中奇數度數點的個數除以2。孤立點不連邊,顯然不考慮。include include include inc...

HDU 3018 AntTrip 尤拉迴路

題目連線 vjandhdu 給乙個無向圖,一條路只能走一次,問幾次能盡可能走完全圖 也就是一筆畫,問幾筆畫完全圖 不存在單獨存在 n 個節點的情況 公式 連線一張圖連線需要的筆數 奇數度節點個數 2 尤拉迴路 include using namespace std define rg registe...