Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Hierholzerov algoritam za pronazal Ojlerovog ciklusa u O(m)
- Podrazumevano su svi cvorovi sa pozitivnim stepenom jedna komponenta
- */
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1e5+10;
- struct Edge
- {
- int u, v, next;
- } grana[N];
- int n, m, k, E;
- int head[N];
- int deg[N];
- bool mark[N];
- void addEdge (int u, int v)
- {
- grana[E++]=(Edge){u, v, head[u]};
- head[u]=E-1;
- }
- bool EulerianCycle ()
- {
- for (int i=1;i<=n;i++) if (deg[i]&1) return false;
- return true;
- }
- void dfs (int v)
- {
- for (int e=head[v];e!=-1;e=grana[e].next)
- {
- if (mark[e]) continue;
- int xt=grana[e].v;
- printf ("%d %d\n", v, xt);
- mark[e]=mark[e^1]=true;
- dfs (xt);
- }
- }
- int main()
- {
- scanf ("%d%d", &n, &m);
- fill (head+1, head+n+1, -1);
- for (int i=0;i<m;i++)
- {
- int a, b;
- scanf ("%d%d", &a, &b);
- addEdge(a, b);
- addEdge(b, a);
- deg[a]++;
- deg[b]++;
- }
- if (EulerianCycle()) dfs (1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment