題 目 傳 送 門 在 這
題目大意
有乙個由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.注意 是邊的...