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

欧拉回路是简单回路_欧拉回路的充分必要条件题目大意就是让你对有向图和无向图分别求欧拉回路非常的模板,但是由于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么叫侧面指纹识别_侧面指纹VS屏幕指纹,谁才是更快的识别方式?[通俗易懂]

    什么叫侧面指纹识别_侧面指纹VS屏幕指纹,谁才是更快的识别方式?[通俗易懂][PConline专业评测]随着全面屏设计普遍化,为了提高屏占比和整机的一体性,前置和后置的物理指纹按键已经慢慢淡出了我们的视线。目前最流行的方式莫过于屏幕指纹技术,由于采用此方法能实现更高的屏占比、更完整的背部外观。但也牺牲了解锁速度、识别率,无法享受以往电容式指纹解锁更快的触感。2018年5月51日晚,荣耀在伦敦正式发布了荣耀20系列年度旗舰手机。荣耀20PRO搭载了6.26英寸魅眼全视屏…

    2022年6月29日
    71
  • 投影矩阵介绍[通俗易懂]

    投影矩阵介绍[通俗易懂]一般我们是将相机模型简化成针孔相机模型,那么相平面与相机坐标系之间的关系为:通常为了方便,会把相平面放在小孔与目标点之间。下面就介绍下相平面投影的三种不同方法。透视投影(perspectiveprojection)通过相似三角形(下图两个虚线三角形)可以得到下列关系:展开就是:这里x_h等为齐次坐标系坐标,X等为相机坐标系点,x等则为相平面上的透视投影点,可以看出,投影点的位置不仅仅是与X等有简单的缩放关系,还和Z成反比,Z越大投影点x等越小,这就

    2022年9月28日
    0
  • 飞鱼星方案助皇冠假日酒店实现高密无线接入

    飞鱼星方案助皇冠假日酒店实现高密无线接入

    2021年5月28日
    81
  • 频谱分析仪的基本使用方法_频谱仪的功能使用

    频谱分析仪的基本使用方法_频谱仪的功能使用因为项目需要,今天学着使用的一下频谱分析仪,项目属于物联网类型,通信方式是使用的当前市面上比较火的Lora技术(当前市面上常用的两种低功耗远距离通信方案是LORA和NB-LOT)。本次使用频谱分析仪用来测量设计的板子用Lora发送无线数据时候的一些相关参数,主要测试天线发送数据时候的发射功率(单位:DB)。在这里对仪器的基本使用做一个记录,以为备忘。一、频谱分析仪的使用入门如下图为所使

    2022年8月11日
    2
  • UiAutomator Android 的自动测试框架(基础)「建议收藏」

    UiAutomator Android 的自动测试框架(基础)「建议收藏」</pre>很久没更新博客了,今天至后期的一段时间将带给大家的是<spanstyle=”font-family:微软雅黑;font-size:14px;line-height:21px;widows:auto;”>UiAutomatorandroid的自动测试框架,一系列的介绍,希望大家喜欢。</span><p></p…

    2022年10月18日
    0
  • VS 2013安装教程「建议收藏」

    VS 2013安装教程「建议收藏」1.下载资源此版本是旗舰版,其他版本自行下载http://download.microsoft.com/download/9/3/E/93EA27FF-DB02-4822-8771-DCA0238957E9/vs2013.5_ult_chs.iso?type=ISO2.装载光盘3.右击应用程序,选择“以管理员身份运行”4.选择安装路径并同意许可,点击下一步。5.选择安装的功能(根据自己需要选择),点击安装6.等待安装即可7….

    2022年9月10日
    0

发表回复

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

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