LA 4255 UVa1423 拓扑排序
题目给出的是Sij的正负号,Sij=ai+...+aj,所以令前缀和Bi=a0+a1+..+ai,a0=0,B0=0,则有Sij=Bj-B(i-1);
由此构造出Bi的拓扑序列,只要每个拓扑序列相邻的Bi的值只相差1,那样总共只有不会超过10个Bi,最大的Bi和最小的Bi的差值的绝对值小于10,
因为ai=Bi-B(i-1),ai的绝对值就必然不超出10;
#include <stdio.h>
#include <string.h>
#define CL(x) memset(x,0,sizeof(x))
const int maxn=;
bool map[maxn][maxn];
char str[maxn*maxn];
int din[maxn];
int dou[maxn];
int c[maxn];
int topo[maxn];
int b[maxn];
int tp,n;
bool dfs(int u)
{
c[u]=-;
for(int v=;v<=n;v++)if(map[u][v]){;
if(!c[v] && !dfs(v))return false;
}
c[u]=;topo[tp--]=u;
return true;
}
bool toposort()
{
tp=n;
CL(c);
for(int u=;u<=n;u++)if(!c[u])
if(!dfs(u)) return false;
return true;
} int main()
{
int t;
scanf("%d",&t);
while(t--){
int p;
scanf("%d",&n);
scanf("%s",str);
p=;CL(din);CL(dou);CL(map);
int i;
for(i=;i<n;i++)for(int j=i+;j<=n;j++){
switch(str[p]){
case '-':map[i][j]=;
break;
case '+':map[j][i]=;
break;
case '':map[i][j]=map[j][i]=;
break;
}
p++;
}
if(toposort())
for(i=;i<=n;i++)if(topo[i]==)break;
b[topo[i]]=;
for(int j=i-;j>=;j--){
if(map[topo[j+]][topo[j]] && map[topo[j]][topo[j+]])
b[topo[j]]=b[topo[j+]];
else
b[topo[j]]=b[topo[j+]]+;
}
for(int j=i+;j<=n;j++){
if(map[topo[j]][topo[j-]] && map[topo[j-]][topo[j]])
b[topo[j]]=b[topo[j-]];
else
b[topo[j]]=b[topo[j-]]-;
}
for(i=;i<=n;i++){
if(i!=)putchar(' ');
printf("%d",b[i]-b[i-]);
}
putchar('\n');
}
return ;
}
LA 4255 UVa1423 拓扑排序的更多相关文章
- LA 4255 (拓扑排序 并查集) Guess
设这个序列的前缀和为Si(0 <= i <= n),S0 = 0 每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下. 还要注意一下前缀和相等的情况,所以用一个并查集来查询. ...
- uvalive 4255 Guess(拓扑排序)
算好题目,反正我没想到可以用图论做(虽然现在做的是图论专题= =) 首先是要把求每个位置上的值转化为求 “前缀和之差”,这是一个很有用的技巧 其次,由输入的(n+(n-1)+...+2+1)个符号,可 ...
- LA4255/UVa1423 Guess 拓扑排序 并查集
评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...
- uva1423 巧用拓扑排序
对于一个序列 a1 a2 ... an 我们可以计算出一个符号矩阵A, 其中Si,j 为 a1+...+aj 的正负号,(连加和大于0则Sij=+ 小于0 Sij=- 等于0 则Sij=0), 根据 ...
- 【拓扑排序或差分约束】Guess UVALive - 4255
题目链接:https://cn.vjudge.net/contest/209473#problem/B 题目大意:对于n个数字,给出sum[j]-sum[i](sum表示前缀和)的符号(正负零),求一 ...
- UVALive - 4255 - Guess (拓扑排序)
Guess 题目传送:Guess 白书例题 注意拓扑排序时,,入度同一时候为0的前缀和须要赋值为同一个数(这个数能够随机取.由于前缀和是累加的,每个a的数值都仅仅和前缀和之差有关).,由于此时能够看成 ...
- D - Guess UVALive - 4255 拓扑排序
Given a sequence of integers, a1, a2, . . . , an, we define its sign matrix S such that, for 1 ≤ i ≤ ...
- BZOJ2815 拓扑排序 + LCA
https://www.lydsy.com/JudgeOnline/problem.php?id=2815 作为一个DAG图,结点之间又有这么明显的等级之分,很容易想到的是拓扑排序. 但是不管是正向的 ...
- cdoj916-方老师的分身 III 【拓扑排序】
http://acm.uestc.edu.cn/#/problem/show/916 方老师的分身 III Time Limit: 3000/1000MS (Java/Others) Memo ...
随机推荐
- MySQL数据备份之mysqldump使用
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- Win7 IIS下启用ASP.NET
问题产生的原因 先装的Win7,未启用IIS, 后启用IIS功能,即使选中开发选项只能默认打开ASP.net 中FrameWork2的支持,其它 版本的FrameWork默认IIS不支持,需要手工开启 ...
- Git系列教程二 基础介绍
一.存储方式 如果让我们设计一个版本控制系统,最简单的方式就是每做一次更改就生成一个新的文件. 这样的方式太占用空间,所以传统的版本控制系统都是保存一个文件的某个版本的全部内容以及其他版本相对于这个版 ...
- JQuery控制滚动条滚动到指定位置
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MVC5 视图 不显示 Styles.Render Scripts.Render 问题解决
第一步:安装 WebGrease 使用 nuget 安装 WebGrease 安装依赖 第二步:修改配置文件 <configSections> <!-- For more infor ...
- LDA的Python实现源码
#-*- coding:utf-8 -*- import logging import logging.config import ConfigParser import numpy as np im ...
- Spark部署三种方式介绍:YARN模式、Standalone模式、HA模式
参考自:Spark部署三种方式介绍:YARN模式.Standalone模式.HA模式http://www.aboutyun.com/forum.php?mod=viewthread&tid=7 ...
- vim 设置行号
1.打开vim 输入 :echo $VIM 查看vim路径 一般是/use/share/vim 2.sudo vim vimrc 打开配置文件,G到文件末尾 3. 插入 :set number 保存推 ...
- flex 弹性布局
采用 flex 布局的元素称为容器,其所有子元素称为项目.常用: 容器上可以设置六个属性:flex-direction.flex-wrap.flex-flow.justify-content ...