poj2230 Watchcow(尤拉迴路)

2022-08-31 18:42:13 字數 1354 閱讀 7795

題    目    傳    送    門    在    這

題目大意

有乙個由n個點和m條邊組成的無向圖。

讓你從節點1出發,每條邊恰好從正反兩個方向走一遍。

輸出任意一種方案。

解題思路

那這題和尤拉迴路對比一下,發現尤拉迴路是每個邊直走一次,所以有以下**。

vis[e] = vis[e ^ 1] = 1;

其中標記了當的方向和反邊。

而這題是從兩個方向走,所以對每個邊只要標記以下當前的方向,每個邊就會遍歷兩遍。

**如下:

#include #include #include #include #include #include #define rep(x, l, r) for(int x = l; x <= r; x++)

#define repd(x, r, l) for(int x = r; x >= l; x--)

#define clr(x, y) memset(x, y, sizeof(x))

#define all(x) x.begin(), x.end()

#define pb push_back

#define mp make_pair

#define maxn 100005

#define maxm 1000005

#define fi first

#define se second

#define sz(x) ((int)x.size())

using namespace std;

typedef long long ll;

typedef vectorvi;

typedef pairpii;

const int inf = 0x3f3f3f3f;

const int p = 10000007;

int lowbit(int x)

int fast_power(int a, int b) return x; }

stacksta;

int n, cnt, tot;

int head[maxn], nxt[maxm], to[maxm];

int ans[2 * maxn];

bool vis[maxm];

void init()

void add(int u, int v)

void euler()

else

}}int main()

euler();

repd(i, tot, 1) printf("%d\n", ans[i]);

return 0;

}

poj1386 尤拉迴路)

題目鏈結 解題思路 把每個單詞當成是一條有向邊。把首字母和尾字母當成是節點,如果該字母是乙個單詞的首字母,該字母的入度就加一,如果是尾字母,該字母的出度就加一。然後判斷是否形成尤拉迴路即可。尤拉路徑判斷條件 首先該圖必須是連通圖。對於無向圖,所有頂點的讀都為偶數,對於有向圖,要麼所有頂點的入度等於出...

POJ2337 尤拉迴路

題意 給你n個由小寫字母組成的單詞,要求將這n個單詞連線起來,使得前乙個單詞的最後乙個字母和後乙個單詞的第乙個字母相容,輸出字典序最小的解 思路 不難發現此題可以轉化為尤拉路徑問題,把每個字串的第乙個字母當作起點,最後乙個字母當作終點,連一條有向邊,求此圖字典序最小的尤拉路徑。對於有向圖來說,存在一...

POJ 1041 尤拉迴路

題意 john要去訪問他的朋友,在這個城市中有n條街道,每條街道與別的街道有兩個交點,現在給出這些街道的資訊 即輸入x y z表示街道z的兩個端點為x,y 問其是否可以每條街道只經過一次,如果存在,則輸出字典序最小的路線,不存在則輸出 round trip does not exist.注意 是邊的...