SCU - 4110 - PE class
先上题目:
4110: PE class
| Submit your solution Discuss this problem Best solutions |
DescriptionThe dwarven kingdom and the giant countries classmates have PE class together. InputThe first line of input is the number of test case. OutputFor each test case output one line the students' heights from position 1 to position N. Sample Input4 4 2 Sample Output-1 2 1 3 4 1 3 2 4 -1 Source
ycg663@scuacm |
题意:有身高为1~n的n个人,每个人的身高都不一样,现在要这些人站成一列,给出一系列的关系(i,j)代表i位置的人要比j位置的人矮。现输出字典序最小的拓扑排序结果。
这一题需要注意的地方是字典序最小,需要逆向构图(有(i,j)的关系,就要构造一条(j,i)的边)。
为什么需要逆向构图?
我的理解:字典序最小的逆否命题是除了遵守边的要求以外,还需要注意排在后面的数需要尽量大,所以我们可以在拓扑排序的时候每一次出来一个位置,就给它赋一个还没有用的最大值。
为什么正向构图就不可以呢?
先看一组数据
4 2
2 3
4 1
如果按照正向构图,结果:4 1 2 3
如果按照逆向构图,结果:1 3 2 4
我的理解:并不一定所有的点都会被边连在一起,如果点被分成了几组的话,那么这几组的先后顺序就需要考虑了。就像上面的例子一组是2->3,另一组是4->1存在一组里面大位置在小位置前面,同时这个大位置比其他组的开头元素都要大,那就会得出错误的答案了(感觉这里说的还是不是很清楚)。
感觉这就像需要贪心一样。但是这里在编号的时候因为它给了你限制条件位置编号大的尽量大(当然,这要先符合拓扑排序的要求),所以就需要逆向构图了。
这一切的根本还是因为拓扑排序结果不唯一。
上代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define NUM 202
#define MAX 40002
using namespace std; int n,m; int e[NUM][NUM];
int tot[NUM];
int lo[NUM]; priority_queue<int,vector<int>,less<int> > p;
bool tp(){
int c=n;
int r=;
while(!p.empty()) p.pop();
for(int i=;i<=n;i++) if(tot[i]==) p.push(i);
while(!p.empty()){
int v=p.top();
lo[v]=c; c--;
r++;
p.pop();
for(int i=;i<=n;i++){
if(e[v][i]==){
tot[i]--;
if(tot[i]==){
p.push(i);
}
}
}
}
if(r<n) return ;
return ;
} int main()
{
int t,u,v;
bool f;
//freopen("data.txt","r",stdin);
scanf("%d",&t);
for(int z=;z<t;z++){
scanf("%d %d",&n,&m);
memset(e,,sizeof(e));
memset(tot,,sizeof(tot));
memset(lo,,sizeof(lo));
f=;
while(m--){
scanf("%d %d",&u,&v);
if(e[v][u]==){
if(u==v) f=;
e[v][u]=;
tot[u]++;
}
}
if(f || !tp()) printf("-1");
else{
for(int i=;i<=n;i++){
if(i!=) printf(" ");
printf("%d",lo[i]);
}
}
printf("\n\n");
}
return ;
}
4110
SCU - 4110 - PE class的更多相关文章
- PE Checksum Algorithm的较简实现
这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...
- 原创 C++应用程序在Windows下的编译、链接:第二部分COFF/PE文件结构
2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下,可执行文件的存储格式的WLF格式.它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的. ...
- 简单PE类代码
三个文件分别是类定义文件pefile.h;类实现文件pefile.cpp;类调用文件petype.cpp. #ifndef PE_FILE_H #define PE_FILE_H #include & ...
- 获取pe文件的文件类型
工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头 ...
- Reverse Core 第二部分 - 13章 - PE文件格式
@date: 2016/11/24 @author: dlive PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...
- PE读写
// 仿PE文件.cpp : Defines the entry point for the console application.// #include "stdafx.h"# ...
- PE文件格式(加密与解密3)(一)
本次的了解主要讲解 PE的基本概念.MS-DOS文件头.PE文件头.区块.输入表.输出表等. 这里我将会结合一个简单的小程序来加深我对PE文件结构的了解. 使用学习工具:有StudyPE.LordPE ...
- 再探.NET的PE文件结构(安全篇)
一.开篇 首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软 ...
- 浅析MSIL中间语言——PE文件结构篇
一.开篇 开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于 ...
随机推荐
- jQery总结01
1 jQuery 的基本语法结构是什么? 2 $(document).ready() 与 window.onload 有什么区别? 3 如何实现 DOM 对象和 jQuery对象间的转化?
- SuperSocket内置的命令行协议的解析
SuperSocket\SocketBase\Protocol\TerminatorReceiveFilter.cs /// <summary> /// Filters received ...
- H264的RTP负载打包的数据包格式,分组,分片
H264的RTP负载打包的数据包格式,分组,分片 1. RTP数据包格式 RTP报文头格式(见RFC3550 Page12): 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ...
- 442C
贪心 感觉思路很奥妙 首先我们把那些比两边小的数删掉,因为不删的话两边的数就会选这个数,这样就成了先上升后下降的序列,很明显除了第一第二大的数都能选,然后统计就好了. #include<bits ...
- 2-2 第二天 利用 QQ 浏览器代理调试端口
在没有域名服务器的情况下微信代理的方案 echo "api_key: N3DYn5356kYDvcd67fRxoecKxQV7fTE0" > ~/.ultrahook gem ...
- mysql出错代码
1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目 ...
- rabbitmq普通集群搭建详细步骤
由于工作需求,需要安装rabbitmq,学习之余,记录一下安装过程 准备基础编译环境yum install gcc glibc-devel make ncurses-devel openssl-dev ...
- C - Gravity Flip
Problem description Little Chris is bored during his physics lessons (too easy), so he has built a t ...
- 用Python+selenium打开IE浏览器和Chrome浏览器的问题
这几天在学Python+selenium自动化,对三大浏览器Firefox,Chrome和IE都做了尝试,也都分别下载了对应的webdriver,如:geckodriver.chromedriver. ...
- Mysql分组求和&LIMIT
分组求和mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY na ...
