给出一个n个数的序列1,然后有m个改动(a, b),在序列2中a跟b在序列中的相对顺序改变.求符合题意的序列2. 题中说道如果一个数的位置不确定,则输出‘?' ,仔细想想,这种情况是不会存在的,因为在给定的序列1中,所有数都会有相对顺序,因此无论怎么修改数对的相对顺序,结果总是确定的. #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<…
题意:1~n这n个数,给你一个初始的顺序,再告诉你那两个数的大小关系发生了变化,求变化后的 顺序,不存在则输出IMPOSSIBLE 思路:这题很遗憾没在比赛的时候过掉,结束后加了一行就AC了.题目真的不难,我就是根据原顺序和变化得到任意两个数之间的大小关系.然后枚举变化后的这些数对,用构造法构造一个合法的序列,最后再和原顺序进行不重复的合并.两个数组,两个指针,合并的时候未发生变化的当前数若大于变化的当前数,则输出原数,否则输出变化后的数,并将对应数组指针后移.再对得到的新顺序进行合法判断,若大…
Problem UVA215-Spreadsheet Calculator Accept:401  Submit:2013 Time Limit: 3000 mSec Problem Description A spreadsheet is a rectangular array of cells. Cells contain data or expressions that can be evaluated to obtain data. A “simple” spreadsheet is o…
UVA.10305 Ordering Tasks 题意分析 详解请移步 算法学习 拓扑排序(TopSort) 拓扑排序的裸题 基本方法是,indegree表示入度表,vector存后继节点.在topsort函数中,制造一个辅助队列,首先从入度表中找到入度为0的点作起点,并且置入度为-1.接着依次处理队列中的节点,首先根据他们的后继,将其后继节点的入度依次减1,若其后继节点中的入度存在-1的,说明成环,则不存在拓扑排序.紧接着再从入度表中找到入度为0的节点,加入到队列中,直到队列空.当退出whil…
1 // 把一个图的所有结点排序,使得每一条有向边(u,v)对应的u都排在v的前面. 2 // 在图论中,这个问题称为拓扑排序.(toposort) 3 // 不难发现:如果图中存在有向环,则不存在拓扑排序,反之则存在. 4 // 不包含有向环的有向图称为有向无环图(DAG). 5 // 可以借助DFS完成拓扑排序:在访问完一个结点之后把它加到当前拓扑序的首部. 6 7 int c[maxn]; 8 int topo[maxn],t; 9 bool dfs(int u) 10 { 11 c[u]…
今天刚学的拓扑排序,大概搞懂后发现这题是赤裸裸的水题. 于是按自己想法敲了一遍,用queue做的,也就是Kahn算法,复杂度o(V+E),调完交上去,WA了... 于是检查了一遍又交了一发,还是WA... 我还以为是用queue的问题,改成stack也WA,然后干脆放弃STL,手敲了队列,还是WA了... 我抓狂了. 感觉没什么问题的,卡了我一个多小时.最后用样例0 1测试,发现是在输入的循环判断时出错了,他要求两个都为0时结束,我只要有一个为0就结束了... 坑爹,血的教训... 然后我把之前…
题目链接: https://cn.vjudge.net/problem/UVA-1572 Automatic Chemical Manufacturing is experimenting with a process called self-assembly. In this process, molecules with natural affinity for each other are mixed together in a solution and allowed to sponta…
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 consist of several instances of the problem. Each instance begins with…
Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28399   Accepted: 9684 Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a set of one or more nodes connected by directed edge…
题目链接: https://vjudge.net/problem/UVA-10305#author=goodlife2017 题目描述 John有n个任务,但是有些任务需要在做完另外一些任务后才能做. 输入 输入有多组数据,每组数据第一行有两个整数1 <= n <= 100 和 m.n是任务个数(标记为1到n),m两个任务直接关系的数量.在此之后,有m行,每行有2个整数i和j,代表任务i必须在任务j之前完成.用n = m = 0结束整个输入. 输出 每一个数据对应一行n个整数,代表任务完成的顺…
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 consist of several instances of the problem. Each instance begins with…
A str.substr(i,j) 从str[i]开始起取j个字符作为返回的字符串 /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { string a, b; cin >> a >> b; string ans = "zzzzzzzzzzzzzzzzzzzzzzzzzz"; string now; ; i <=…
题意:已知矩阵S,求序列a.已知矩阵Sij = “ + ” if ai + . . . + aj > 0; Sij = “ − ” if ai + . . . + aj < 0; and Sij = “0” otherwise. 分析: 1.由Sij = ‘+’ 可知,ai + . . . + aj > 0,即sum[j] - sum[i - 1] > 0,即sum[j] > sum[i - 1],即j优先级比i - 1高,由j向i - 1连一条有向边,i - 1入度+1.…
本题要求输出所有拓扑排序的序列. 还好本题的数据量不是非常大.限制在26个大写英文字母,故此能够使用递归法输出. 这个递归输出所有解在Leetcode非常多这种题目的,不小心的话,还是非常难调试的. 整体考了递归和拓扑排序,还有推断能否够拓扑排序-就是是否图有环. 考了三大知识点.难度还是有的.由于数据量不大,故此推断环能够使用一般递归方法.递归仅仅须要注意细节就好了. #include <stdio.h> #include <vector> #include <string…
T1:模拟 自己第一天的简直跟白痴一样啊...模拟都会打错.. 当时貌似在更新最大值的时候打逗比了... if((sum[x]==max && x<maxh) || sum[x]>max){  max=sum[x];  maxh=x; //现在(也就是9月+)再看,脑袋里只有sortsortsort,连最基本的更新最大指都忘了....智商唉.... 附上代码: #include<cstdio> #include<cstring> using namesp…
Description An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D.…
刘书上例题  拓扑排序 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #include <set> #include <queue> #include <stack> #include <vector> #include <sstream> #include <string> #include &…
题意: 经典的拓扑排序.有n个任务,然后某些任务必须安排在某些任务前面完成,输出一种满足要求的序列. 分析: 拓扑排序用离散里面的话来说就是将偏序关系拓展为全序关系.我们将“小于”这种关系看做一条有向边,如果得到的图是有向无环图DAG(Directed Acyclic Graph),则是存在拓扑排序的,如果存在有向环,则不存在拓扑排序. 注意输入数据里面m可能等于0的情况,就因为这个WA了两次. //#define LOCAL #include <iostream> #include <…
拓扑排序模版题型: 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 consist of several instances of the problem. Each instance be…
描述 sqybi上次找GF的工作十分不成功,于是依旧单身的他在光棍节前的某天突发奇想,要给自己找一个BF(这里指的是男性的好朋友……),这样既可以和人分享内心的压抑(路人甲:压抑还分享么……),也可以保证自己能够有资格过今年的光棍节. 这次sqybi为了增加成功率,希望先对他提前确定的几个人定一下重要度.每个人的重要度都用一个自然数表示,这里的自然数包括0. 现在sqybi的心目中已经有了一些对于这些人的看法.他对于某个人的看法是基于另一个人的基础之上的,比如他会认为a比b的重要度至少大k. 现…
题意:给你一些任务1~n,给你m个数对(u,v)代表做完u才能做v 让你给出一个做完这些任务的合理顺序. 题解:拓扑排序版题 dfs到底再压入栈. #define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include<stdio.h> #include<algorithm> #include<string> #include<vector> #include<list> #in…
题意:给定n个带标号的正方形,标号要么是一个大写字母加一个+或-,要么是00, 当且仅当大写字母相同并且符号相反时可以连接,问你给定的能不能拼成一个无限大的的东西. 析:说实话,真心没有看出来是拓扑排序,后来知道是,可是还是不会写. 既然要拼成无限大,那么只要拼的时候拼出一个环来,又由于每个是无限多的,那么可以一直重复, 就能拼起来无限大的东西,把每个正方形看成一条边,那么不就是一个拓扑排序,看看能不能找到一个环么, 如果能找到,那么就可以,找不到,就不可以.注意的是正方形可以从四面都拼,所以要…
在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点. 先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一. 一直做改操作,直到所有的节点都被分离出来. 如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况. 下面是算法的演示过程. 下面看一道例题 题目链接:https://vjudge.net/problem/UVA-10305 代码真的很简单 ,完全是水题. 看代码: #include<iostrea…
题意 给出一些任务的优先级别 将这些任务进行的时间 进行先后排序 思路 拓扑排序 将所以有先后关系的任务都连一条边 然后每次 输出 度为0 的任务 每次把 以这个任务为弧的边 都取消 相对应任务的度也-1 再循环 AC代码 #include <cstdio> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cmath> #include <climits&…
题意: 给定n个点,与m条边, 给出他们的拓扑排序. 分析: 拓扑排序可以有两种做法, 第一种是dfs, 每次都找到某一个点的终点, 然后加入序列末尾, 正在访问的标记为-1, 访问过的标记为1, 未访问的标记为0 int c[maxn]; vector<int> G[maxn]; stack<int> s; bool dfs(int u){ c[u] = -;//标记为正在访问 ; i < G[i].size(); i++){ int v = G[u][i]; ) retu…
题目链接: http://172.16.0.132/senior/#main/show/5905 题目: oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰在一张地图中探险.地图中有$n$个篝火(也就是存档点).在篝火处休息可以将生命值恢复满.每个篝火都会向其他篝火的其中之一连有一条通道(显然,通道是双向的),这些篝火之间都相互可达.也就是说,这是一张$n$个点,$n$条边的无向连通图.每条通道里都有一些怪物,经过oi_juruo的分析,他得到了每条边…
Description 挑竹签——小时候的游戏夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏.挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签.如果动了其他的竹签,就要换对手来挑.在所有的竹签都被挑走之后,谁挑走的竹签总数多,谁就胜了.身为神明的诹访子自然会让早苗先手.为了获胜,早苗现在的问题是,在诹访子出手之前最多能挑走多少竹签呢?为了简化问题,我们假设当且仅当挑最上层的竹签不会动到其他竹签.   Input 输入文件mikado.in.第一行输入两个整数n,m, 表示竹签的根数…
[Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]);(x−>y)∈E 这样可以保证,按阶段进行DP,每次在获取f[x]的时候,你可以保证f[x]已经获得了; 最后取max(f[1..n]) [Code] #include <bits/stdc++.h> using namespace std; #define lson l,m,rt<…
题意: 给出一些正方形,这些正方形的每一条边都有一个标号.这些标号有两种形式:1.一个大写字母+一个加减号(如:A+, B-, A-......), 2.两个0(如:00):这些正方形能够任意翻转和旋转.当两个正方形通过旋转或翻转,使得他们的公共边为同样大写字母而且符号相反时,他们就能够彼此结合拼在一起.如今给出n中正方形.每种正方形有无限多种,问这些正方形是否能拼成一个无限大的结构. 题解: easy想到.要使这些正方形形成无限大地结构.那么这些正方形通过拼接后一定能循环(即通过不断地拼接出现…
题意转化 考虑我们对于每一对激活关系建一条有向边,则对于每一个点,其答案就是其所能到达的点数. 于是,这个问题就被我们搬到了图上,成了一个图论题. 优化建图 考虑我们每次需要将一个区间向一个区间连边. 则我们可以用线段树优化建图. 具体步骤就是,建两棵线段树,每次新建一个虚节点,然后把需要向外连边的区间在一棵线段树上向这个节点连边,并从这个节点在另一棵线段树上向应被连边的区间连边. 求解答案 建完图之后,考虑如何求答案. 首先,我们\(Tarjan\)缩点,显然一个强连通分量内的所有节点可以相互…