拓扑排序&&欧拉(回)路】的更多相关文章

摘要:最近是不适合写代码么?忘记初始化wa到死<_=_=_>.唔--最近在学习图论,从基础搞起,先搞了拓扑排序和欧拉(回)路. Part 0. 拓扑排序 ==挖坑== Part 1. 欧拉(回)路 先判连通性 欧拉回路: 有向图:每个顶点入度等于出度 无向图:每个顶点度数都为偶数 欧拉路: 有向图:每个顶点入度等于出度,或者,一个顶点入度比出度大一,一个顶点入度比出度小一(起点),其余顶点入度等于出度 无向图:每个顶点度数都为偶数,或者,只有两个顶点度数为奇数 HDU 3018 Ant Tri…
题目:http://codeforces.com/contest/36/problem/E 给定一张无向图,要求输出两条欧拉路覆盖所有边: 分类讨论,首先判-1:有两个以上连通块 / 有四个以上奇度数点 / 只有一条边 / 有两个连通块而其中一个连通块里有四个奇度数点 (/ 有连通块里有奇数个奇度数点): 然后分两个连通块和一个连通块的情况进行 dfs 找欧拉路(模板 dfs ): 注意可能没有奇度数的点,也就是有欧拉回路,所以不仅找奇度数点进行 dfs ,还要在那之后 dfs 仍然没有被走过的…
题目描述 Ali has taken the Computer Organization and Architecture course this term. He learned that there may be dependence between instructions, like WAR (write after read), WAW, RAW. If the distance between two instructions is less than the Safe Distan…
H.Skiing In this winter holiday, Bob has a plan for skiing at the mountain resort. This ski resort has MM different ski paths and NN different flags situated at those turning points. The ii-th path from the S_iS​i​​-th flag to the T_iT​i​​-th flag ha…
题面:洛谷传送门 BZOJ传送门 标签里三个算法全都是提高组的,然而..这是一道神题 我们把这道题分为两个部分解决 1.找出所有咒语机两两之间的包含关系 2.求出咒语机的最长上升序列 我们假设咒语机$a,b$满足$a\in b$ 如果这个条件不成立,说明存在一个串$S$,$a$能输出,$b$不能输出 一个咒语机能产生的字符串可能是无限长的,直接枚举字符串肯定不行 考虑转化问题 我们构造另外一个图,图中每个点是一个二元组$(x,y)$ 我们暴力枚举咒语机$a$中的一个元件$x$,$b$中的一个元件…
题目:给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 题目简述:先tarjan缩点,再从入度为零处进行一次拓扑排序,求最长路即可,话说拓扑排序求最长路真方便... 注意: 要明确拓扑的写法,用栈写最优. 再进行拓扑排序之前我们要进行将点权转化为边权的操作,具体操作看拓扑排序. #include<bits/stdc++.h> using namespace std;…
第一题:太鼓达人:BZOJ3033 题意:给出k,求一个最长的M位01串,使其从每一个位置向后走k个得到 的M个k位01串互不相同(最后一个和第一个相邻,即是一个环).输出 字典序最小的答案. 2 ≤ k ≤ 11. 结论+爆搜: 第二问我们将每个k二进制数看成一个点,在它后面加上0/1就能得 到两个新数,我们从这个数向两个新数连边,于是这就变成了求一个欧 拉回路的问题.显然此题是存在欧拉回路的第一问答案为2的k次方 ,第二问暴力求欧拉回路即可. 发现sjh的注释很详细,所以贿赂搞来了一个满满注…
洛谷题目传送门 差分约束模板题,等于双向连0边,小于等于单向连0边,小于单向连1边,我太蒻了,总喜欢正边权跑最长路...... 看遍了讨论版,我是真的不敢再入复杂度有点超级伪的SPFA的坑了 为了保证复杂度,需要缩点后用拓扑排序统计答案.首先全相等的点本质上是相同的,可以缩到一起,所以先来一波Tarjan把0环全缩起来.接着再考虑边权为1的边.如果这时候还出现了环(包括缩点以后的自环),一定是不存在方案的,这是可以用拓扑排序判断.否则,就是个DAG,拓扑排序也可以直接计算出答案. 统计答案要注意…
题意 给定一个 \(n\) 点 \(m\) 边的边权非负的有向图,边有字符,求以每个点为开头的最长路字典序最小的路径 \(hash\) 值. \(n,m\leq 10^6\) 分析 首先建反图拓扑排序后入度不为0的点的答案为 \(inf\) . 在 \(dep\) 相同时,怎么比较两种转移的优劣?注意到建完反图之后可以通过判定两个转移第一个字典序不同的位置的大小,可以倍增\(+hash\) 实现. 总时间复杂度为 \(O(20*(n+m))\). 代码 #include<bits/stdc++.…
1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 456  Solved: 215[Submit][Status][Discuss] Description Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的格式如下. 一块的第一行有两个正整数n,m.分别表示该咒语机中元件的个数.咒…
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 1944  Solved: 759[Submit][Status][Discuss] Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是E…
(点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权值最大者为多少,如下图,加粗的为权值最大者: 解题思路 这是在一个无起点.终点的图中的求最长路的问题,因此无法像一般的最长路问题那样求解. 首先,因为图中只存在点权,为了方便,我们一般将点权转化为边权:取每条边的权值为其终点的权值,将点权转化为边权. 然后,由于我们每条路径都是以入度为0的点开始,以…
洛谷题目传送门 又是一年联赛季.NOIP2017至此收官了. 这个其实是比较套路的图论DP了,但是细节有点恶心. 先求出\(1\)到所有点的最短路\(d1\),和所有点到\(n\)的最短路\(dn\). 设\(f_{i,j}\)表示\(i\)号点,所有与\(d1\)差距不超过\(j\)的路径条数.转移的时候肯定是从小到大枚举\(j\),再枚举边转移.显然每条边都有一个\(\Delta\)值,为\(d1_x-d1_y+w\),含义就是强制经过这条边的最短路长度相较于原最短路长度的增量.于是有转移式…
巡回赛 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 世界拳击协会(WBA)是历史最悠久的世界性拳击组织,孕育了众多的世界冠军,尤其是重量级,几乎造就了大家耳熟能详的所有伟大的拳王.阿里.弗雷泽.福尔曼被称为"70年代重量级拳坛 三巨头",是当之无愧的拳王,他们的得到的金腰带都刻有 WBA 字样.为庆贺世界拳击协会成立 50 周年,WBA 主席门多萨邀请 N 名拳击手进行了 M 场巡回比赛,每场比赛均可分出胜负,比赛过后组委会要对 N 名选手进行排序,对…
关于最小生成树,拓扑排序.强连通分量.割点.2-SAT的一点笔记 前言:近期在复习这些东西,就xjb写一点吧.当然以前也写过,但这次偏重不太一样 MST 最小瓶颈路:u到v最大权值最小的路径.在最小生成树上.是次小生成树的一个子问题qwq 最小极差生成树:枚举最小生成树上的最小权值的大小 topo sort 应用: 可以去掉基环树上的树 DAG上拓扑序小的点指向拓扑序大的点.混合图变DAG时拓扑排序一下然后把无向边从左往右连就可以了.(无解:原来有向边构成的图不是DAG) Tarjan 强连通分…
https://www.luogu.org/problemnew/show/P1073 C国有 n n个大城市和 mm 条道路,每条道路连接这 nn个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 mm 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1条. C C国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同.但是,同一种商品在同一个城市的买入价和卖出价始终是相同的. 商人阿龙来到 CC 国旅…
题目来源:NOIP2013 普及第四题 题目描写叙述 Description 一条单向的铁路线上,依次有编号为1, 2, -, n的n个火车站.每一个火车站都有一个级别,最低为1级.现有若干趟车次在这条线路上行驶.每一趟都满足例如以下要求:假设这趟车次停靠了火车站x.则始发站.终点站之间全部级别大于等于火车站x的都必须停靠. (注意:起始站和终点站自然也算作事先已知须要停靠的网站) 比如,下表是5趟车次的执行情况.当中.前4趟车次均满足要求,而第5趟车次因为停靠了3号火车站(2级)却未停靠途经的…
题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束系统 对于val[u]>=val[v]+w 要得到极小解,v是没有受限制的,其最小值为0 而u受到v的限制,显然,val[u]的最小值就是val[v]+w 在多条件限制下,我们用v连向u边权为w的边表示每个限制条件val[u]>=val[v]+w 那么如果得到的是拓扑图,则按拓扑序求到每个点的最长…
题意: 给定n个单词, 问是否存在一条欧拉通路(如acm,matal,lack), 如果存在, 输出字典序最小的一条. 分析: 这题可以看作http://www.cnblogs.com/Jadon97/p/7210278.html升级版本(那题只问是否存在, 这题需要输出路径) 判断有向图的欧拉通路, 主要用到出入度的判定和连通性. 有向图欧拉通路判定方法:图连通:除2个端点外其余节点入度=出度:1个端点入度比出度大1:一个端点入度比出度小1 或 所有节点入度等于出度 DFS求解算法:选择一个正…
在计算机科学领域中,有向图的拓扑排序是其顶点的先行排序,对于每个从顶点u到顶点v的有向边uv,在排序的结果中u都在v之前. 如果图是有向无环图,则拓扑排序是可能的(为什么不说一定呢?) 任何DAG具有至少一个拓扑排序,并且这些已知算法用于在线性时间内构建任何DAG的拓扑排序 图论:是组合数学的一个分支,它和其他分支比如:群论.拓扑学.矩阵论有着密切的关系.图是图论的主要研究对象.图是由若干给定的顶点以及连接两定点的变构成的图形,这些图形通常用来描述某些事物间的某种特定关系.顶点用于代表事物,而顶…
题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序(dot是最小字典序的,比‘a'小). 显然就是以26个字母为结点,n个字符串为边,求解有向图的欧拉通路. 不过这里要注意,26个字母不一定都用上. 先判断有向图的欧拉通路的条件是否成立: 1.有一个结点入度等于出度+1且有一个结点出度等于入度+1且其他结点入度等于出度.(或所有结点入度等于出度) 2.有向图…
本文将从以下几个方面介绍拓扑排序: 拓扑排序的定义和前置条件 和离散数学中偏序/全序概念的联系 典型实现算法解的唯一性问题 Kahn算法 基于DFS的算法 实际例子 取材自以下材料: http://en.wikipedia.org/wiki/Topological_sorting http://en.wikipedia.org/wiki/Hamiltonian_path 定义和前置条件: 定义:将有向图中的顶点以线性方式进行排序.即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶…
A - Bi-shoe and Phi-shoe Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1370 Appoint description:  System Crawler  (2016-07-08) Description Bamboo Pole-vault is a massively popular sport in X…
1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Status][Discuss] Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室,类型为 Ti.Ti是一个1~3间的整数, 1表示可以传送到第 xi行任意…
做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(TSP) 描述 Shrek是一个大山里的邮递员,每天负责给所在地区的n个村庄派发信件.但杯具的是,由于道路狭窄,年久失修,村庄间的道路都只能单向通过,甚至有些村庄无法从任意一个村庄到达.这样我们只能希望尽可能多的村庄可以收到投递的信件. Shrek希望知道如何选定一个村庄A作为起点(我们将他空投到该村…
我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是所有点的入度=出度 或者 有且只有一点出度=入度+1(起点)且有且只有一点入度=出度+1(终点). #include<cstdio> #include<cstring> using namespace std; ]; int Find(int a){ while(par[a]!=a){…
nyoj349   http://acm.nyist.net/JudgeOnline/problem.php?pid=349poj1094   http://poj.org/problem?id=1094这两个题是一样的,不过在poj上A了才算真的过,ny上数据有一点弱. 题目大意输入n,m. 一共有n个字母(从A开始), m行语句每个语句“x﹤y”,说明x,y之间的偏序关系.让你判断是否可以通过这些关系得到一个唯一的升序序列,若能则输出这个序列并指出通过前多少条语句得出的,如果n个字母间存在矛…
拓扑排序的DFS算法 输入:一个有向图 输出:顶点的拓扑序列 具体流程: (1) 调用DFS算法计算每一个顶点v的遍历完成时间f[v] (2) 当一个顶点完成遍历时,将该顶点放到一个链表的最前面 (3) 返回链表(按照链表次序输出顶点即为顶点的拓扑序列) 样例输入 5 5 0 1 1 0 2 1 1 2 1 2 3 1 4 2 1 样例输出 4 0 1 2 3 因为对有向无环图进行dfs遍历,得到的可能是森林,所以为了保证对所有点进行拓扑排序,我的做法是对所有入度为0的点进行dfs遍历 #inc…
题意:给你一些字符串,这些字符串可以首位相接(末位置如果和另一个字符串的首位置相同的话就可以相连) .然后问你是否可以全部连起来. 思路:就是取出每个字符串的首尾位置,然后求出出度和入度,根据有向欧拉通路的性质,可以求出是否可以组成欧拉通路 . 当然还得考虑一下这个图是否是连通图,这里可以用并查集记录边的集合.最后判断是否是一个连通图. 欧拉通路水题. #include <iostream> #include <cstdio> #include <cstring> #i…
问题:POJ1094   本题考查拓扑排序算法   拓扑排序:   1)找到入度为0的点,加入已排序列表末尾: 2)删除该点,更新入度数组.   循环1)2)直到 1. 所有点都被删除,则找到一个拓扑排序: 2. 或剩余结点中没有入度为0的点,则原图中必存在环.     本题算法   1.依次输入一组关系   对当前关系进行拓扑排序 1)若存在环,则无法排序 2)若根据当前关系,每次循环都唯一的确定入度为0的点,则存在排序   2.若输完所有的大小关系之后,仍然没有确定大小排序,也没有发现回环,…