题目 E[中]假的字符串 做法 一个字符串能作为最小值最基础的条件为不能出现前缀字符串 我们需要确定一种每个字符的排名使得\(s\)作为最小值,另有很多字符串\(t\),与\(s\)第一个不相同的位置可以产生一种偏序限制,如\(s-x,t_y,rk_x<rk_y\) 而判断是否可行直接跑拓扑排序就行 code #include<bits/stdc++.h> typedef int LL; const LL maxn=300009; typedef std::string str; str…
链接:https://www.nowcoder.com/acm/contest/59/B来源:牛客网 题目描述 给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们 输入描述: 第一行一个数表示n之后n行每行一个字符串表示给定的字符串 输出描述: 第一行输出一个数x表示可行的字符串个数之后输出x行,每行输出一个可行的字符串输出的顺序和输入的顺序一致 示例1 输入 6 mcfx ak ioi wen l a 输出 5 mcfx…
题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabet she could make some strings come before all the others lexicographically (dictionary ordering). For instance Bessie found that for the strings "omm&…
题目大意: 给定n个总长不超过m的互不相同的字符串,现在你可以任意指定字符之间的大小关系.问有多少个串可能成为字典序最小的串,并输出这些串.n <= 30,000 , m <= 300,000 题解: 首先我们可以把所有的串插入到Trie树中. 然后我们枚举每个串,判断是否存在可行方案 我们枚举到一个串,那么我们就在Trie树中进行查找 每一次从某一个节点向下走的时候,我们都要保证当前走的这条支路是字典序最小的 也就是这条支路上的字母的字典序小于这个节点上的其他所有支路的字典序 所以我们就成功…
题意:给定N个字和M行他们之间的关系,要求输出他们的拓扑排序.此题采用边输入边检测的方式,如果发现环,就结束并输出当前行号:如果读取到当前行时,可以确定拓扑序列就输出,不管后面的输入(可能包含环路):如果到最后还是不能确定拓扑序列,就输出指定的字符串. 拓扑排序:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前. 分析:首先,拓扑排序的算法还是挺直观…
题目 Output: standard output Time Limit: 1 second Memory Limit: 32 MB John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been executed. Input The input will co…
tsort - 拓扑排序 本文链接:http://codingstandards.iteye.com/blog/834572   (转载请注明出处) 用途说明 tsort命令通常用于解决一种逻辑问题,即必须通过观察到的部分次序预测出整个次序.tsort命令可以对保存在文本文件中的数据进行拓扑排序,只要你按照一定的规则把数据写在文本文件中,然后使用tsort命令进行排序. 拓扑排序是对有向无环图的一种排序.表示了顶点按边的方向出现的先后顺序.如果有环,则无法表示两个顶点的先后顺序. 在现实生活中,…
Date:2019-06-17 14:43:59 算法描述 1.定义队列Q,并把所有入度为0的结点加入队列 2.取队首结点,输出.然后删除所有从它除法的边,并令这些边到达的顶点的入度-1,若某个顶点的入度为0,则加入队列Q 3.反复进行2操作,直至队列为空. 如果队列为空时入过队的结点数目恰好为N,说明拓扑排序成功,图G为有向无环图DAG(Directed Acyclic Graph) 否则,拓扑排序失败,图G中有环 算法实现 vector<int> adj[M]; //邻接表实现 int n…
在计算机科学领域中,有向图的拓扑排序是其顶点的先行排序,对于每个从顶点u到顶点v的有向边uv,在排序的结果中u都在v之前. 如果图是有向无环图,则拓扑排序是可能的(为什么不说一定呢?) 任何DAG具有至少一个拓扑排序,并且这些已知算法用于在线性时间内构建任何DAG的拓扑排序 图论:是组合数学的一个分支,它和其他分支比如:群论.拓扑学.矩阵论有着密切的关系.图是图论的主要研究对象.图是由若干给定的顶点以及连接两定点的变构成的图形,这些图形通常用来描述某些事物间的某种特定关系.顶点用于代表事物,而顶…
题意 : 给出含有 N 个点 M 条边的图(可能不连通或者包含环),每个点都标有一个小写字母编号,然后问你有没有一条路径使得路径上重复字母个数最多的次数是多少次,例如图上有条路径的顶点标号顺序是  abcaca 那么答案就是 3 ,因为 a 出现了三次,如果答案无穷大则输出 -1 分析 :  不难联想到是一个动态规划类型的题目 定义 DP[i][j] 为到达顶点 i 时字母 j 最多出现了多少次 显然如果图中有环的话就输出 -1 这也就是说如果图中不存在合法拓扑排序就说明有环 如果存在拓扑排序,…
牛客练习赛11 假的字符串 (Trie树+拓扑找环) 链接:https://ac.nowcoder.com/acm/problem/15049 来源:牛客网 给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们 题解:对于第i个字符串来说,如果有一个串是他的前缀,那么这个前缀的字典序重定义后是肯定比他小的,所以我们用trie树保存前缀 ​ 对于当前字符串,从该字符串的第i个字母向其父亲节点上的其他字母连边,表示存在大小关系\…
2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Discuss] Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11,…
P3065 [USACO12DEC]第一!First! 题目链接:https://www.luogu.org/problemnew/show/P3065 题目描述 Bessie一直在研究字符串.她发现,通过改变字母表的顺序,她可以按改变后的字母表来排列字符串(字典序大小排列). 例如,Bessie发现,对于字符串串“omm”,“moo”,“mom”和“ommnom”,她可以使用标准字母表使“mom”排在第一个(即字典序最小),她也可以使用字母表“abcdefghijklonmpqrstuvwxy…
题目链接 Solution 感觉比较巧的题啊... 考虑几点: 可以交换无数次字母表,即字母表可以为任意形态. 对于以其他字符串为前缀的字符串,我们可以直接舍去. 因为此时它所包含的前缀的字典序绝对比它本身小. 需要使得某个字符串 \(S\) 字典序最小,需要讨论两种情况: \(1.\) 与它没有公共前缀的字符串 此时我们即使得 \(S_{1}\) 大于其第一个即可. \(2.\) 与它有公共前缀的字符串 我们令其最长公共前缀的位置为 \(k\) . 那么此时我们即要求,对于任意字符串 \(T\…
BFS模板,记住这5个: (1)针对树的BFS 1.1 无需分层遍历 from collections import deque def levelOrderTree(root): if not root: return q = deque([root]) while q: head = q.popleft() do something with this head node... if head.left: q.append(head.left) if head.right: q.append…
需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数据存在一个字符串中 C:把字符串转换成字符串数组 D:对字符串数组进行排序 E:数组转换成字符串 F:把字符串写入文件中 public static void main(String[] args) throws IOException { // 读取文件中的数据 字符缓冲输入流 BufferedR…
1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析:  A: 把s.txt这个文件给做出来  B: 读取该文件的内容,存储到一个字符串中  C: 把字符串转换为字符数组  D: 对字符数组进行排序  E: 把排序后的字符数组转换为字符串  F: 把字符串再次写入ss.txt中 2. 代码实现: package cn.itcast…
一:题目大意:   给你一个关系图,判断是否合法,    每个人都有师父和徒弟,可以有很多个:  不合法:  1) . 互为师徒:(有回路)  2) .你的师父是你徒弟的徒弟,或者说你的徒弟是你师父的师父.(3元环或更多元环) 二:简单理解就是: 判断有向图中是否存在回路或至少3元环:  此题至少有三种做法,此处更新拓扑排序的做法: 三: 1. 拓扑排序: 1) . 统计每个点的入度: 2) . 将入度为0的点加入队列: 3) . 出去队首元素,将此元素所连接的点入度减一,若此后入度为0则加入队…
package com.bjpowernode.t03sort; import java.util.ArrayList;import java.util.Collections; /* * List中存放字符串进行排序 */public class TestSort01 { public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(); list1.add("eee…
和LeetCode 207. Course Schedule(拓扑排序-求有向图中是否存在环)类似. 注意到.在for (auto p: prerequistites)中特判了输入中可能出现的平行边或自环. 代码: class Solution { public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) { // [0, {1, 2, 3}], me…
题目分析: 建出后缀自动机,然后把A串用倍增定位到后缀自动机上,再把B串用倍增定位到后缀自动机上. SAM上每个点上的A串根据长度从小到大排序,建点,依次连边. 再对于SAM上面每个点,连到儿子的边,同时连到儿子的最小A串的边. 对于m组关系,建立x连到y定位到的SAM上的点的边,同时连y所能匹配的到定位到的点上的最短字符串的边. 然后跑拓扑排序就行了. 代码: #include<bits/stdc++.h> using namespace std; ; char str[maxn]; int…
(点击此处查看原题) 题意 给出一个有n个结点,m条边的DAG图,每个点都有权值,每条路径(注意不是边)的权值为其经过的结点的权值之和,每条路径总是从入度为0的点开始,直至出度为0的点,问所有路径中权值最大者为多少,如下图,加粗的为权值最大者: 解题思路 这是在一个无起点.终点的图中的求最长路的问题,因此无法像一般的最长路问题那样求解. 首先,因为图中只存在点权,为了方便,我们一般将点权转化为边权:取每条边的权值为其终点的权值,将点权转化为边权. 然后,由于我们每条路径都是以入度为0的点开始,以…
题目大意: 给你一个关系图,判断是否合法.每个人都有师父和徒弟,可以有很多个: 若A是B的师父,B是C的师父,则A也算C的师父. 不合法:  1) . 互为师徒:(有回路)  2) .你的师父是你徒弟的徒弟,或者说你的徒弟是你师父的师父.(出现回路) 思路: 判断有向图中是否存在回路或至少3元环: 此题至少有三种做法,此处更新拓扑排序的做法: 解题方法: 一:拓扑排序: 1) . 统计每个点的入度: 2) . 将入度为0的点加入队列: 3) . 出去队首元素,将此元素所连接的点入度减一,若此后入…
//根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小与形参c一致,数量由形参d指定.例如:输入c为Y,d为4,则输出ZABC. #include <stdio.h> #pragma warning (disable:4996) void fun(char c, int d) { int i; ], a[], *ptr; /**********found**********/ ; i<; i++) { A[i] = 'A' + i; a[i] = 'a' + i;…
对反串建SAM弄出后缀树,每个b串通过倍增定位其在后缀树上对应的节点,根据其长度将节点拆开.然后每个a串也找到对应的节点,由该节点向表示a串的节点连边,再把所给的边连上跑拓扑排序即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define N 800010 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'…
[USACO12DEC]第一!First! 题目描述 Bessie has been playing with strings again. She found that by changing the order of the alphabet she could make some strings come before all the others lexicographically (dictionary ordering). For instance Bessie found that…
两道经典的同类型拓扑排序+DFS问题,第二题较第一题简单,其中的难点在于字典序输出+建立单向无环图,另外理解题意是最难的难点,没有之一... POJ1128(ZOJ1083)-Frame Stacking 题意:每个图片由同一字母组成的边框表示,每个图片的字母都不同: 在一个最多30*30的区域放置这些图片,问底层向顶层叠加的图片次序,多选时按字典序输出 注:每个图片的四边都会有字符显示,其中顶点显示两边. 题解:题意的理解是难点,题目对图片的范围确定说得有点含糊不清,博主一开始就被出现的五张图…
一,问题描述 给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常. 要想实现图的算法,如拓扑排序.最短路径……并运行看输出结果,首先就得构造一个图.由于构造图的方式有很多种,这里假设图的数据存储在一个文件中, 每一行包含如下的信息: LinkID,SourceID,DestinationID,Cost 其中,LinkID为该有向边的索引,SourceID为该有向边的起始顶点的索引,DestinationID为该有向边的终止顶点的索引,Cost为该有向边的权重. 0,0,1,1…
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选什么课么? 小Hi:挺多的,比如XXX1,XXX2还有XXX3.本来想选YYY2的,但是好像没有先选过YYY1,不能选YYY2. 小Ho:先修课程真是个麻烦的东西呢. 小Hi:没错呢.好多课程都有先修课程,每次选课之前都得先查查有没有先修.教务公布的先修课程记录都是好多年前的,不但有重复的信息,好像很多都不正确了. 小Ho:课程…
题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y.    要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排序,dfs枚举即可,为简便起见,这里将字符变量转化为整型值存储. #include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <algorithm…