1.判斷是否為尤拉存在尤拉迴路---裸的判斷
尤拉迴路就是看一筆能不能把途中所有的邊跑完沒得重複
對於無向邊----建立雙向邊判斷每個點的入度是否為2的倍數
1.1
對於有向邊---建立單向邊判斷每個點的入度與出度是否相等
1.2
然後就是看一下是否所有的點是否連線----可以用並查集或者dfs判斷,具體看情況來定。2
判斷是否存在尤拉迴路,就是同時滿足上邊的1,2兩個條件
hdu 1878** 並查集 條件1.1+2
#include#include#include#include#include#include#include#include#include#include#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define me(a,b) memset(a,b,sizeof(a))
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define max4(a,b,c,d) max(max(a,b),max(c,d))
#define max3(x,y,z) max(max(x,y),max(y,z))
typedef long long ll;
using namespace std;
const int maxn=1005;
int f[maxn],vis[maxn];
int n,m;
void init()
}int find(int x)
void unionn(int x,int y)
int main()
bool flag=true;
int cnt=0;
for(int i=1;i<=n;i++)
if(cnt>1)
flag=false;
else
}if(flag)
printf("1\n");
else
printf("0\n");
}return 0;
}
2。輸出尤拉迴路 uoj 117
分兩種情況建立單向或者雙向邊
判斷1.1 or 1.2 ,然後用dfs來進行遍歷,如果能夠遍歷所有的邊,那麼輸出即可
但是這道題的資料很大很坑,存在的問題就是可能會出現自環,比如給了10000組的 1 1邊,那麼dfs的時候遍歷是會超時的,利用鄰接表的性質進行優化
**如下
#include#include#include#include#include#include#include#include#include#include#define myself i,l,r
#define lson i<<1
#define rson i<<1|1
#define lson i<<1,l,mid
#define rson i<<1|1,mid+1,r
#define half (l+r)/2
#define inff 0x3f3f3f3f
#define lowbit(x) x&(-x)
#define me(a,b) memset(a,b,sizeof(a))
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define min3(x,y,z) min(min(x,y),min(y,z))
#define max4(a,b,c,d) max(max(a,b),max(c,d))
#define max3(x,y,z) max(max(x,y),max(y,z))
typedef long long ll;
const double pi=acos(-1.0);
const double e=2.718281828459;
using namespace std;
const int maxn=1e5+5;
const int maxm=2e5+5;
struct node
edge[maxm<<1];
int n,m;
int in[maxn],out[maxn];
int head[maxn],sign,cnt;
void add(int u,int v)
; head[u]=sign;
}void init()
int ans[maxm];
void dfs_unedge(int u)
}void dfs_diredge(int u)
}}int main()
else
}if(t==1)//條件1.1
else//條件1.2
if(t==1) dfs_unedge(x);//
else dfs_diredge(x);
if(cnt!=m)//條件2
printf("no\n");
else
return 0;
}
UOJ 117 尤拉迴路
分析 直接dfs一遍,複雜度o n m 注意類似dinic的當前弧優化,雙向邊標記兩條。sigongzi和mrclr的部落格,關於尤拉迴路以及此題文章。有關尤拉路的總結。1 2 author mjt 3 date 2018 10 16 17 34 46 4 last modified by mjt ...
UOJ 117 尤拉迴路
在圖中找乙個環使得每條邊都在環上出現恰好一次。要注意的地方好多啊 每條邊恰好出現一次!條件 每個點偶度 入度 出度 方法就是套圈法啦 然後本題自環是合法的,如果20000個 1,1 邊的話會被卡成 o n 2 所以加上當前弧優化 include include include include inc...
尤拉迴路 UOJ117 尤拉迴路 題解
判斷無向圖和有向圖是不是尤拉迴路。如果是,求出任意一條尤拉迴路。判斷尤拉迴路 證明?我不會啊!怎麼求尤拉迴路呢?因為已經確定了是尤拉迴路,所以我們可以直接dfs瞎搞。隨便從乙個點開始dfs,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...