首页 > 其他分享 >欧拉路径

欧拉路径

时间:2022-11-18 19:11:54浏览次数:71  
标签:int 出度 路径 maxn 图是 欧拉

参考资料: OI-wiki

首先让我们明确几个概念.

我们定义, 通过图中所有边恰好一次的通路称为欧拉通路, 若该路为回路则称为欧拉回路.
若一个图存在欧拉回路, 则称该图为欧拉图. 若不存在欧拉回路但存在欧拉通路, 该图成为半欧拉图.

无向图 (半) 欧拉图判定:

  • 一个连通图是无向欧拉图等价于该图中点的度数均为偶数.
  • 一个连通图是无向半欧拉图等价于该图中只有两个点的度数为奇数 (起点和终点).

上面两个判定是众所周知的.

对于有向图, 我们也可以进行判定:

  • 一个图是有向欧拉图等价于该图为一个 SCC 且每个点的入度和出度相同.
  • 一个图是有向半欧拉图等价于:
    • 若将边都视为无向边则该图连通;
    • 只存在一个点, 它的出度等于入度加一, 该点为起点;
    • 只存在一个点, 它的入度等于出度加一, 该点为终点;
    • 除起点和终点外的所有点入度和出度相同.

也很容易理解.

luoguP7771 【模板】欧拉路径

题意: 给定一个有向图, 输出其字典序最小的欧拉路径 (不存在输出 No).

首先根据上面的判定定理我们容易判定该图是否为(半)欧拉图并找出欧拉路径的起点和终点.
然后直接 dfs 就完事了. 每次我们选择第一条还没有走过的路径, 返回的时候把点压入栈即可.
需要注意的是我们需要注意一点细节, 需要记录现在已经选到第几条边了, 不要重复遍历已经走过的边.
要保证字典序最小只需要对邻接表排一下序就行了.

code:

const int maxn=100010;
int n,m,s=1,t,scnt,tcnt,indeg[maxn],outdeg[maxn],cur[maxn];
vector<int> G[maxn];
stack<int> path;
void dfs(int u)
{
    for(int i=cur[u];i<G[u].size();i=cur[u])
    {
        cur[u]=i+1;
        dfs(G[u][i]);
    }
    path.push(u);
}
bool check()
{
    for(int i=1;i<=n;i++)
    {
        if(indeg[i]==outdeg[i])continue;
        if(indeg[i]==outdeg[i]+1)
        {
            tcnt++;
            t=i;
            if(tcnt>1)return 0;
            continue;
        }
        if(indeg[i]+1==outdeg[i])
        {
            scnt++;
            s=i;
            if(scnt>1)return 0;
            continue;
        }
        return 0;
    }
    return 1;
}
int main()
{
    n=read();m=read();
    for(int i=1;i<=m;i++)
    {
        int u=read(),v=read();
        indeg[v]++;outdeg[u]++;
        G[u].push_back(v);
    }
    if(!check())
    {
        printf("No");
        return 0;
    }
    for(int i=1;i<=n;i++)sort(G[i].begin(),G[i].end());
    dfs(s);
    while(!path.empty())
    {
        printf("%d ",path.top());
        path.pop();
    }
    return 0;
}

欧拉路径的题好像全是板子, 不写了.

标签:int,出度,路径,maxn,图是,欧拉
From: https://www.cnblogs.com/pjykk/p/16555636.html

相关文章

  • c#如何获取快捷方式的目标路径
    https://wenda.so.com/q/1373000633063497引用COM组件WindowsScriptHostObjectModel;//设置一个快捷方式IWshRuntimeLibrary.WshShellshell=newIWshRuntimeLibrary......
  • JFileChooser设置窗体打开路径
    JFileChooser作为Java中Swing的文件选取器,是放置在对话框中的轻量组件。通过该组件能够打开文件选取对话框,并记录所选文件,因此在软件开发过程中使用率很高。但是在使用过程......
  • 字符串练习2 最长抑或路径(01trie树)
    题目链接在这里:P4551最长异或路径-洛谷|计算机科学教育新生态(luogu.com.cn)是一道比较经典的问题,对于异或问题经常会使用01trie树来解决。当然01trie树只是用来统......
  • 文件路径获取方法
    Path类介绍1#region程序集mscorlib.dll,v4.0.0.02//C:\ProgramFiles(x86)\ReferenceAssemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll......
  • jmeter参数化----绝对路径&相对路径
    绝对路径:就是文件存在的路径线程组--->添加--->CSV数据文件设置,文件名选择文件所在绝对路径地址查看响应结果 相对路径:指数据文件(bat/txt/csv)相对于当前执行的.jmx......
  • STA学习记录4-输入输出路径约束
    @目录1输入路径约束2输出路径约束参考1输入路径约束由于STA不能检查不受约束路径上的时序约束,因此需要约束所有路径来进行时序分析当然,如果存在一些输入控制信号,我们......
  • 【c&c++】链接静态库文件时的搜索路径
    经测试,链接静态库的时候静态库的搜索路径包括/lib;/lib64;/usr/lib;/usr/lib64/;/usr/local/lib;/usr/local/lib64, 静态库文件完整的搜索顺序:比如我们要生成的最终可......
  • pictureBox1.Image的获得图片路径的三种方法
    1.绝对路径: this.pictureBox2.Image=Image.FromFile("D://1.jpg"); 2.相对路径: Application.Startup......
  • WinXP下变量方式表达对应路径说明
    在一些批处理或者系统技巧操作教程文章中,我们常常会看到一些形如%windir%或者%systemdrive%的变量。这些变量都代表着什么含义呢?下面西部e网的ice......
  • 进阶实验03-网络流量路径控制
    HCIP-进阶实验03-网络流量路径控制实验需求某城域网网络环境部署规划如图所示,该网络通过OSPF协议进行部署设计,分为四个区域,分别为骨干区域0、普通区域1.2.3。其中普通......