先上题目:

4110: PE class

Submit your solution     Discuss this problem     Best solutions
 

Description

The dwarven kingdom and the giant countries classmates have PE class together.
The students' height from 1 cm to N cm,everyone's height is different from other's.
There are N students in total, and there are M pairs of relationship, such as (i, j)
said the student's height stand at position i is less than the one stand at position j.
Can you find each position of the height of students?

Input

The first line of input is the number of test case.
The first line of each test case contains two integers, N (1 ≤ N ≤ 200) and M (0 ≤ M ≤ 40,000).
The next M line each contain two integers a and b, indicating the student's height stand at
position a must be less than the one stand at position b. (1 ≤ a, b ≤ N)
There is a blank line before each test case.

Output

For each test case output one line the students' heights from position 1 to position N.
If there are several solutions exist, you should output the one with the smallest height for label 1,
then with the smallest height for label 2, then with the smallest height for label 3 and so on...
If no solution exists, output one line,just a number -1. output a blank line after each test case

Sample Input

4

4 2
1 2
2 1 4 1
2 1 4 1
3 2 3 1
1 1

Sample Output

-1

2 1 3 4

1 3 2 4

-1

Source

ycg663@scuacm
Sichuan University Programming Contest 2012 Preliminary

  题意:有身高为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的更多相关文章

  1. PE Checksum Algorithm的较简实现

    这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...

  2. 原创 C++应用程序在Windows下的编译、链接:第二部分COFF/PE文件结构

    2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下,可执行文件的存储格式的WLF格式.它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的. ...

  3. 简单PE类代码

    三个文件分别是类定义文件pefile.h;类实现文件pefile.cpp;类调用文件petype.cpp. #ifndef PE_FILE_H #define PE_FILE_H #include & ...

  4. 获取pe文件的文件类型

    工程文件petype.cpp通过调用pefile类中的函数获取文件类型. 文件类型的判断通过5个监测点完成. 监测点1:dos头的e_magic 监测点2:nt头的Signature 监测点3:文件头 ...

  5. Reverse Core 第二部分 - 13章 - PE文件格式

    @date: 2016/11/24 @author: dlive ​ PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...

  6. PE读写

    // 仿PE文件.cpp : Defines the entry point for the console application.// #include "stdafx.h"# ...

  7. PE文件格式(加密与解密3)(一)

    本次的了解主要讲解 PE的基本概念.MS-DOS文件头.PE文件头.区块.输入表.输出表等. 这里我将会结合一个简单的小程序来加深我对PE文件结构的了解. 使用学习工具:有StudyPE.LordPE ...

  8. 再探.NET的PE文件结构(安全篇)

    一.开篇 首先写在前面,这篇文章源于个人的研究和探索,由于.NET有自己的反射机制,可以清楚的将源码反射出来,这样你的软件就很容易被破解,当然这篇文章不会说怎么样保护你的软件不被破解,相反是借用一个软 ...

  9. 浅析MSIL中间语言——PE文件结构篇

    一.开篇 开篇我想讲一下于本文无关的话题,其实我很想美化一下自己博客园一直没时间弄,无意间找了博客园李宝亨的博客园里面有一篇分享自己主题的文章,我就将这个模板暂时用作我的blog主题,我要讲述一个关于 ...

随机推荐

  1. linux patch 命令小结【转】

    本文转载自:http://blog.csdn.net/wh_19910525/article/details/7515540 说到patch命令,就不得不提到diff命令,也就是制作patch的必要工 ...

  2. Linux Framebuffer驱动框架之二软件架构(未完待续)【转】

    本文转载自:http://blog.csdn.net/gqb_driver/article/details/12918547 /************************************ ...

  3. SQL 优化记录

    1. 对Where 语句的法则 1.1 避免在WHERE子句中使用in,not  in,or 或者having. 可以使用 exist 和not exist代替 in和not in. 可以使用表链接代 ...

  4. poj--3061--Subsequence(贪心)

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10882   Accepted: 4498 Desc ...

  5. FFMS SQL文件执行错误

    [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 b ...

  6. codevs1519 过路费(最小生成树+LCA)

    1519 过路费  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2 ...

  7. [Luogu 2331] [SCOI2005]最大子矩阵

    [Luogu 2331] [SCOI2005]最大子矩阵 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 ...

  8. vs2008bin下Debug bll Release文件 obj下的Debug bll Release文件区别

    Bin目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Re ...

  9. 5.29MyBatis Generator

    二.MyBatis Generator CRUD(创建,检索,更新,删除) 与表结构匹配的Java POJO BLOB (binary large object),二进制大对象,是一个可以存储二进制文 ...

  10. HEK_费用报表审核无审核权限,有些字段无法编辑的问题处理

    Q:HEK_费用报表审核无审核权限,有些字段无法编辑的问题处理 A:设置AP员工->给AP员工分配审批权限->绑定员工和ERP账号 1.将审核人设置为AP员工 2.分配给员工审批权限 3. ...