混合尤拉 HDOJ 3472 HS BDC

2021-06-28 17:53:07 字數 2357 閱讀 9400

題意:詞語接龍,給出

n個詞語,一些詞語可以反轉,問是否存在尤拉路徑。

先判定圖是否連通,再判斷是否存在尤拉路徑

尤拉路徑的條件:滿足尤拉迴路或只存在兩個點為奇數。

然後建圖:令

c=(出度

-入度)

/2,若出度大於入度,連邊s,

i容量為

c,反之連i,

t容量為c。

若求尤拉路徑,設兩個奇數的點為

k1,k2

,out[k1]++,in[k2]++,

再連邊k1,k2,

容量為1.

#include #include #include #include #include #include #include #include #include #include #include #include #include #define maxn 55

#define maxm 4005

#define eps 1e-7

#define mod 1000000007

#define inf 0x3f3f3f3f

#define pi (acos(-1.0))

#define lowbit(x) (x&(-x))

#define mp make_pair

#define ls o<<1

#define rs o<<1 | 1

#define lson o<<1, l, mid

#define rson o<<1 | 1, mid+1, r

#define pii pair#pragma comment(linker, "/stack:16777216")

typedef long long ll;

typedef unsigned long long ull;

//typedef int ll;

using namespace std;

ll qpow(ll a, ll b)return res;}

ll powmod(ll a, ll b)return res;}

// head

struct edge

edge(int v, int c, int next) : v(v), c(c), next(next) {}

}e[maxm];

queueq;

int h[maxn], cnte;

int dis[maxn];

int cur[maxn];

int cnt[maxn];

int pre[maxn];

int in[maxn];

int out[maxn];

int flow, t, s, nv;

void addedges(int u, int v, int c)

void bfs()

} }}int isap()

for(int i = s; i != t; i = e[cur[i]].v)

flow += f;

u = pos;

} for(e = h[u]; ~e; e = e[e].next) if(e[e].c && dis[e[e].v] + 1 == dis[u]) break;

if(~e)

else

dis[u] = minv + 1;

cnt[dis[u]]++;

u = pre[u];

} }return flow;

}const int mc = 'a';

int n, cc;

int f[maxn];

bool vis[maxn];

char ss[maxn];

int find(int u)

bool merge(int a, int b)

else return false;

}void init()

void read()

}void work()

s = 27, t = 28, nv = cc + 2;

t2 = cc = 0;

int k1, k2;

for(int i = 0; i < 26; i++) if(vis[i])

} if(t2 == 2)

for(int i = 0; i < 26; i++) if(vis[i])

} if(t2 != 0 && t2 != 2)

if(isap() != cc) printf("poor boy!\n");

else printf("well done!\n");

}int main() }

return 0;

}

hdu 3472 HS BDC 混合路的尤拉路徑

這題是混合路的尤拉路徑問題。1.判斷圖的連通性,若不連通,無解。2.給無向邊任意定向,計算每個結點入度和出度之差deg i deg i 為奇數的結點個數只能是0個或2個,否則肯定無解。3.若存在2個deg i 為奇數的結點,則在兩點連一條流量為1的邊,方向任意 設立源點s和匯點t 自己另外定兩個點 ...

hdu 3472 HS BDC 混合尤拉 網路流

題意就是問能否將給定的幾個單詞全部連線起來,兩個單詞能連線是當前乙個單詞的最後乙個字母等於後乙個單詞的首字母。還有一些單詞反向也沒有關係。建圖,每輸入乙個單詞,只看他的首尾字母,連線一條首字母到尾字母的有向邊,如果他可以反向,那麼再反向建立一條邊,即該邊是無向邊。然後就是乙個混合尤拉了。還有乙個注意...

hdoj1878《 並查集 尤拉》

c 並查集 尤拉 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status description 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存...