题目给出的是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 拓扑排序的更多相关文章

  1. LA 4255 (拓扑排序 并查集) Guess

    设这个序列的前缀和为Si(0 <= i <= n),S0 = 0 每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下. 还要注意一下前缀和相等的情况,所以用一个并查集来查询. ...

  2. uvalive 4255 Guess(拓扑排序)

    算好题目,反正我没想到可以用图论做(虽然现在做的是图论专题= =) 首先是要把求每个位置上的值转化为求 “前缀和之差”,这是一个很有用的技巧 其次,由输入的(n+(n-1)+...+2+1)个符号,可 ...

  3. LA4255/UVa1423 Guess 拓扑排序 并查集

    评分稍微有一点过分..不过这个题目确确实实很厉害,对思维训练也非常有帮助. 按照套路,我们把矩阵中的子段和化为前缀和相减的形式.题目就变成了给定一些前缀和之间的大小关系,让你构造一组可行的数据.这个东 ...

  4. uva1423 巧用拓扑排序

    对于一个序列 a1 a2 ... an 我们可以计算出一个符号矩阵A, 其中Si,j 为 a1+...+aj 的正负号,(连加和大于0则Sij=+ 小于0 Sij=-  等于0 则Sij=0), 根据 ...

  5. 【拓扑排序或差分约束】Guess UVALive - 4255

    题目链接:https://cn.vjudge.net/contest/209473#problem/B 题目大意:对于n个数字,给出sum[j]-sum[i](sum表示前缀和)的符号(正负零),求一 ...

  6. UVALive - 4255 - Guess (拓扑排序)

    Guess 题目传送:Guess 白书例题 注意拓扑排序时,,入度同一时候为0的前缀和须要赋值为同一个数(这个数能够随机取.由于前缀和是累加的,每个a的数值都仅仅和前缀和之差有关).,由于此时能够看成 ...

  7. D - Guess UVALive - 4255 拓扑排序

    Given a sequence of integers, a1, a2, . . . , an, we define its sign matrix S such that, for 1 ≤ i ≤ ...

  8. BZOJ2815 拓扑排序 + LCA

    https://www.lydsy.com/JudgeOnline/problem.php?id=2815 作为一个DAG图,结点之间又有这么明显的等级之分,很容易想到的是拓扑排序. 但是不管是正向的 ...

  9. cdoj916-方老师的分身 III 【拓扑排序】

    http://acm.uestc.edu.cn/#/problem/show/916 方老师的分身 III Time Limit: 3000/1000MS (Java/Others)     Memo ...

随机推荐

  1. EasyUI配置和组件

    首先在webcontent添加配置文件 新建静态或动态网站,在title的下面加入五个配置文件路径,注意:循序不能乱 <!-- 顺序不可以乱 --> <!-- 1.jQuery的js ...

  2. mpstat命令学习

    mpstat是一个linux系统实时监控工具,它与vmstat命令类似 mpstat命令监控了cup的一些统计信息且这些信息存放在/proc/stat文件中 mpstat命令多用在多cpu系统中,查看 ...

  3. 不安装Oracle客户端使用PLSQL连接Oracle数据库的方法

    1,下载PL\SQL http://dl8.cr173.com/soft1/PLSQLDeveloper10_ha.zip(这个是我下载的,带破解和汉化); 2,下载完后傻瓜式安装 ,这里说下,1是P ...

  4. 对比SerialCommunication和微软的SerialPort,向SerialPort看齐

    SerialCommunication是我综合网上看到的代码稍作修改而成的串口通信类,而SerialPort则是C#的System类库的IO目录Ports子目录下的串口通信类.SerialCommun ...

  5. 一个人java深入理解java logback配置

    http://blog.csdn.net/initphp/article/category/1230072/2

  6. 使用C#模拟Outlook发送邮件,代码编译报错

    添加OutLook API using OutLook = Microsoft.Office.Interop.Outlook; 发送邮件方法 public void SendEmail() { Out ...

  7. frag General URL components

    HTTP: The Definitive Guide 2.2.7 Fragments Some resource types, such as HTML, can be divided further ...

  8. Virtualbox 虚拟机支持硬件摄像头

    最近我们公司做了一个摄像头项目,需要测试各种浏览器的情况,我就安装了一个Win xp的虚拟机,但是发现无法找到摄像头,经过查阅资料找到了解决办法 前提环境 Mac电脑 Virtualbox 虚拟机 虚 ...

  9. [skill] 进程 线程

    在业务逻辑上: 进程线程没有区别. 在系统资源上: 进程拥有自己的地址空间.线程拥有自己的堆栈和临时变量,与其他线程共享地址空间. 在通信代价上: 线程间通信代价更低,实现更方便.进程通信相对开销比较 ...

  10. python基础3

    一.文件操作:打开文件:f = open("db", "r") #只读f = open("db", "w") #只写,注 ...