題目位址
題意:告訴你乙個無向圖,問你要一筆畫多少次才能把所有邊都畫一遍,且每條邊僅畫一遍。
思路:如果你還沒有理解或者不知道尤拉圖的概念的話,可以看我的另一篇部落格:傳送門,那裡詳細的講了有向圖無向圖的尤拉圖的概念。言歸正傳,這題其實也是一道裸的尤拉鏈路的題目,他其實一筆畫就是要找到邊能全部連起來,然後我們就會發現有以下幾種情況:
乙個孤立的點
一條尤拉迴路(每個點的度都是偶數)
一條尤拉鏈路(有兩個點的度為奇數)
多條尤拉路徑(有多個點的度為奇數)
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...