POJ 2230 Watchcow 尤拉回路
title
analysis
我們只需要在求尤拉回路的參考程式中,去掉對每條邊的vis標記,即可得到本題的解答。
這是因為,按照一般的儲存方式,每條無向邊在鄰接表中會以正、反兩個方向分別儲存一次。
若沒有vis標記,則根據表頭陣列head的更新方式,每條無向邊會被正、反各經過一次,恰好滿足題目要求。
這是《算階》上的原題解。
code
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
template<typename T>inline void read(T &x)
{
x=0;
T f=1,ch=getchar();
while (!isdigit(ch) && ch^'-') ch=getchar();
if (ch=='-') f=-1, ch=getchar();
while (isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48), ch=getchar();
x*=f;
}
int ver[maxn<<1],Next[maxn<<1],head[maxn],len;
inline void add(int x,int y)
{
ver[++len]=y,Next[len]=head[x],head[x]=len;
}
int Stack[maxn],top;
int ans[maxn],t;
bool vis[maxn];
inline void eular()
{
Stack[++top]=1;
while (top>0)
{
int x=Stack[top],i=head[x];
while (i && vis[i]) i=Next[i];
if (i)
{
Stack[++top]=ver[i];
// vis[i]=vis[i^1]=1;
head[x]=Next[i];
}
else
{
--top;
ans[++t]=x;
}
}
}
int main()
{
int n,m;
read(n);read(m);
len=1;
for (int i=1;i<=m;++i)
{
int x,y;
read(x);read(y);
add(x,y);add(y,x);
}
eular();
for (int i=t;i;--i)
printf("%d\n",ans[i]);
return 0;
}
相關文章
- poj1637 Sightseeing tour(混合圖尤拉回路)
- 尤拉回路
- 圖論—尤拉回路/路徑圖論
- Sum of Consecutive Prime Numbers POJ - 2739(線性尤拉篩+尺取法)
- 尤拉計劃700:尤拉幣
- CF1994F Stardew Valley(尤拉回路)
- 計蒜客:農場看守(DFS、尤拉回路)
- 尤拉篩
- 尤拉方程
- 尤拉定理
- 尤拉降冪
- 尤拉函式φ函式
- 尤拉路徑
- 尤拉公式 - 筆記公式筆記
- 【圖論】尤拉圖圖論
- 尤拉函式入門函式
- 尤拉計劃622:洗牌
- 尤拉篩(線性篩)
- 尤拉序的小技巧
- 淺談尤拉函式函式
- 尤拉計劃698:123數
- 尤拉計劃696:麻將
- 尤拉計劃719:拆分數
- 尤拉函式的應用函式
- P7771 【模板】尤拉路徑
- 一些“尤拉路”板題
- 尤拉計劃699:三腳數
- 尤拉計劃706:三象數
- 尤拉計劃718:不可達數
- 尤拉函式性質和模版函式
- 尤拉計劃686:2的冪
- 尤拉計劃715:六元組
- 尤拉計劃709:偶數袋
- 尤拉計劃708:你只要2
- 尤拉計劃712:指數差
- 尤拉路徑學習筆記筆記
- 尤拉篩線性篩質數
- 尤拉角和萬向節鎖