欧拉回路是简单回路_欧拉回路的充分必要条件

欧拉回路是简单回路_欧拉回路的充分必要条件题目大意就是让你对有向图和无向图分别求欧拉回路非常的模板,但是由于UOJ上毒瘤群众太多了所以你必须加上一个小优化就是每次访问过一个边就把它删掉有点像Dinic的当前弧优化的感觉注意是在dfs完一个节点把当前的边加入到栈里面然后输出的时候为了保证原来的顺序就直接弹栈就好了//Author:dream_maker#includeusingnamespacestd;//————–…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

题目大意

就是让你对有向图和无向图分别求欧拉回路

非常的模板,但是由于UOJ上毒瘤群众太多了

所以你必须加上一个小优化

就是每次访问过一个边就把它删掉

有点像Dinic的当前弧优化的感觉

注意是在dfs完一个节点把当前的边加入到栈里面

然后输出的时候为了保证原来的顺序就直接弹栈就好了

//Author: dream_maker

#include

using namespace std;

//———————————————-

typedef pair pi;

typedef long long ll;

typedef double db;

#define fi first

#define se second

#define fu(a, b, c) for (int a = b; a <= c; ++a)

#define fd(a, b, c) for (int a = b; a >= c; –a)

#define fv(a, b) for (int a = 0; a < (signed)b.size(); ++a)

const int INF_of_int = 1e9;

const ll INF_of_ll = 1e18;

template

void Read(T &x) {

bool w = 1;x = 0;

char c = getchar();

while (!isdigit(c) && c != ‘-‘) c = getchar();

if (c == ‘-‘) w = 0, c = getchar();

while (isdigit(c)) {

x = (x<<1) + (x<<3) + c -‘0’;

c = getchar();

}

if (!w) x = -x;

}

template

void Write(T x) {

if (x < 0) {

putchar(‘-‘);

x = -x;

}

if (x > 9) Write(x / 10);

putchar(x % 10 + ‘0’);

}

//———————————————-

const int N = 4e5 + 10;

struct Edge {

int v, id, nxt;

} E[N];

int head[N], tot = 0;

int fro[N], to[N], n, m;

void addedge(int u, int v, int id) {

E[++tot] = (Edge) {v, id, head[u]};

head[u] = tot;

}

namespace Solve1 {

int du[N], vis[N];

stack st;

void dfs(int u) {

for (int &i = head[u]; i; i = E[i].nxt) {

int cur = i;

if (vis[abs(E[cur].id)]) continue;

vis[abs(E[cur].id)] = 1;

dfs(E[cur].v);

st.push(E[cur].id);

}

}

void solve() {

fu(i, 1, m) ++du[fro[i]], ++du[to[i]];

fu(i, 1, n) if (du[i] & 1) {

printf(“NO”);

return;

}

fu(i, 1, m) {

addedge(fro[i], to[i], i);

addedge(to[i], fro[i], -i);

}

fd(i, n, 1) {

if (head[i]) {

dfs(i);

break;

}

}

if ((signed) st.size() != m) {

printf(“NO”);

} else {

printf(“YES\n”);

while (st.size()) {

Write(st.top()), putchar(‘ ‘);

st.pop();

}

}

}

}

namespace Solve2 {

int in[N], out[N], vis[N];

stack st;

void dfs(int u) {

for (int &i = head[u]; i; i = E[i].nxt) {

int cur = i;

if (vis[E[cur].id]) continue;

vis[E[cur].id] = 1;

dfs(E[cur].v);

st.push(E[cur].id);

}

}

void solve() {

fu(i, 1, m) ++out[fro[i]], ++in[to[i]];

fu(i, 1, n) if (out[i] ^ in[i]) {

printf(“NO”);

return;

}

fu(i, 1, m) addedge(fro[i], to[i], i);

fu(i, 1, n) {

if (head[i]) {

dfs(i);

break;

}

}

if ((signed) st.size() != m) {

printf(“NO”);

} else {

printf(“YES\n”);

while (st.size()) {

Write(st.top()), putchar(‘ ‘);

st.pop();

}

}

}

}

int main() {

#ifdef dream_maker

freopen(“input.txt”, “r”, stdin);

#endif

int op; Read(op);

Read(n), Read(m);

fu(i, 1, m) Read(fro[i]), Read(to[i]);

if (op == 1) Solve1::solve();

else Solve2::solve();

return 0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215512.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月14日 下午1:22
下一篇 2025年7月14日 下午2:01


相关推荐

  • 数据库 之 关系模式范式

    数据库 之 关系模式范式主要有6种范式:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴德斯科范式(BCNF),第四范式(4NF),第五范式(5NF),按从左至右的顺序一种比一种要求更严格。要符合某一种范式必须

    2022年7月1日
    30
  • Java生成MD5的两种方式

    Java生成MD5的两种方式1原生的packagecom.pibigstar.common.utils;importjava.security.MessageDigest;/***MD5加密工具类*@authorpibigstar**/publicclassMyMD5Util{//盐,用于混交md5privatestaticfinalStringsl…

    2022年7月8日
    22
  • 代码走查内容

    代码走查内容代码走查内容 1 函数审查 1 入参个数合理性检查 一般不要超过 6 个 超过的可以考虑用结构体 2 入参合法性检查 空指针 取值范围 内存越界 2 变量审查 1 是否初始化 2 是否存在类型不匹配的比较操作 尤其是 unsigned 类型和 signed 类型的比较 对于 unsigned 类型注意边界判断 3 是否定义了变量但是没有使用 3 内存资源审查 1 是否对数组进行了越界操作 2 内存拷贝时是否判断了长度 Strcpy 的时候要注意 dst 要比 src 内存大 否则导致内存越界

    2026年3月26日
    2
  • linux scp命令使用详解

    linux scp命令使用详解Linuxscp 命令一 前言二 语法三 实例 1 从本地复制到远程 1 命令格式 2 应用实例 3 复制目录命令格式 2 从远程复制到本地一 前言 Linuxscp 命令用于 Linux 之间复制文件和目录 scp 是 securecopy 的缩写 scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令 scp 是加密的 rcp 是不加密的 scp 是 rcp 的加强版 windows 系统下也可以使用 scp 命令 因此我们可以使用 scp 在 linux 与 windos 系统上互相传递文

    2026年3月18日
    2
  • Coze微观小人国教程

    Coze微观小人国教程

    2026年3月12日
    2
  • 组播VLAN配置

    组播VLAN配置组播 VLAN 配置目 nbsp 录 1 组播 VLAN 配置 1 11 1 组播 VLAN 简介

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号