题意:

      给你n个求,他们的重量是1-n(并不是说1号求的重量是1...),然后给你m组关系a,b,表示a的重量小于b的重量,然后让你输出满足要求的前提下每个球的重量,要求字典序最小。

思路:

      很容易想到这个可以用拓扑排序(其实如果没有字典序那个要求的话查分约束也行),还有就是这个里面的字典序最小不是说拓扑排序的字典序最小,这个要整清楚,如果是求拓扑排序的序列字典序最小直接在出队列的时候找一个编号最小的就行,但是这个不是,我们必须要逆向建边,然后逆向分配编号,因为正向的话会出问题,比如刚开始有好几个入度是0,但是我们无法找到该现则那个会最早碰到1号位置,这个自己画一下就清楚了,一开始我想的是差分约束+并查集之后二级排序,排序的依据是如果当前这两个点是同一个父亲,那么按照距离排序,否则按照id排序,其实这样逻辑没错,但是sort本身不可以这样用的,因为这两个限制条件并不是那种一个建立在另一个的基础上的那种,这个说不太清楚,自己好好和xy的那个二级排序对比下就明白了,还有这个题目数据并不是很大,做法不唯一,直接搜索理论上没啥大问题,如果是上面说的那种逆向的拓扑排序的话其实有点贪心的意思。


#include<queue>
#include<stdio.h>
#include<string.h> #define N_node 200 + 10
#define N_edge 40000 + 400 using namespace std; typedef struct
{
int to ,next;
}STAR; typedef struct NODE
{
int x;
friend bool operator < (NODE a, NODE b)
{
return a.x < b.x;
}
}NODE; STAR E[N_edge];
int s_x[N_node] ,in[N_node];
int list[N_node] ,tot;
NODE xin ,tou; void add(int a ,int b)
{
E[++tot].to = b;
E[tot].next = list[a];
list[a] = tot;
} bool Sort_TP(int n)
{
priority_queue<NODE>q;
for(int i = 1 ;i <= n ;i ++)
if(!in[i])
{
xin.x = i;
q.push(xin);
}
int nowsort = n;
while(!q.empty())
{
tou = q.top();
q.pop();
s_x[tou.x] = nowsort --;
for(int k = list[tou.x] ;k ;k = E[k].next)
{
xin.x = E[k].to;
if(!--in[xin.x]) q.push(xin);
}
}
return nowsort == 0;
} int main ()
{
int t ,n ,m ,i ,a ,b;
scanf("%d" ,&t);
while(t--)
{
scanf("%d %d" ,&n ,&m);
memset(list ,0 ,sizeof(list)) ,tot = 1;
memset(in ,0 ,sizeof(in));
for(i = 1 ;i <= m ;i ++)
{
scanf("%d %d" ,&a ,&b);
add(b ,a);
in[a] ++;
}
if(Sort_TP(n))
{
for(i = 1 ;i <= n ;i ++)
if(i == n) printf("%d\n" ,s_x[i]);
else printf("%d " ,s_x[i]);
}
else
{
printf("-1\n");
continue;
}
}
return 0;
}

POJ3687拓扑排序+贪心的更多相关文章

  1. BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心

    BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜 ...

  2. POJ3687 Labeling Balls(拓扑排序\贪心+Floyd)

    题目是要给n个重量1到n的球编号,有一些约束条件:编号A的球重量要小于编号B的重量,最后就是要输出字典序最小的从1到n各个编号的球的重量. 正向拓扑排序,取最小编号给最小编号是不行的,不举出个例子真的 ...

  3. 2019.01.20 bzoj5158 Alice&Bob(拓扑排序+贪心)

    传送门 短代码简单题. 题意简述:对于一个序列XXX,定义其两个伴随序列a,ba,ba,b,aia_iai​表示以第iii个数结尾的最长上升子序列长度,bib_ibi​表示以第iii个数开头的最长下降 ...

  4. HDU 4857 逃生(反向建边的拓扑排序+贪心思想)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  5. BZOJ2535: [Noi2010]Plane 航空管制2(拓扑排序 贪心)

    题意 题目链接 Sol 非常妙的一道题. 首先不难想到拓扑排序,但是直接对原图按\(k\)从小到大拓扑排序是错的.因为当前的\(k\)大并不意味着后面的点\(k\)也大 但是在反图上按\(k\)从大到 ...

  6. [LOJ2114][HNOI2015]-菜肴制作-拓扑排序+贪心

    <题面> 一个蒟蒻的痛苦一天 在今天的节目集训中,麦蒙将带领大家学习9种错误的解题策略 $15\%$算法(看两个就往下走吧) 1> puts("Impossible!&qu ...

  7. 洛谷P3243 [HNOI2015]菜肴制作 拓扑排序+贪心

    正解:拓扑排序 解题报告: 传送门! 首先看到它这个约束就应该要想到拓扑排序辣QwQ 首先想到的应该是用优先队列代替队列,按照节点编号排序 然后也很容易被hack:<5,1> 正解应为5, ...

  8. BZOJ 2109 航空管制(拓扑排序+贪心)

    绝世好题啊.. 题意:给出一个DAG,和每个点要求出现在这个DAG里面的拓扑排序的位置<=ti,求出所有可能的拓扑排序里面每个点出现的位置的最小值. 正着做不好做,考虑反着做,建立这个图的反图. ...

  9. bzoj4010: [HNOI2015]菜肴制作(拓扑排序+贪心+堆)

    这题不是求最小字典序...撕烤了半个小时才发现不对劲T T 这题是能让小的尽量前就尽量前,无论字典序...比如1能在2前面就一定要在2前面... 显然是要先拓扑排序,让小的尽量前转化成让大的尽量往后丢 ...

随机推荐

  1. CentOS7安装 xmlsec1 编译并运行官方示例

    1. 自动安装下列软件和依赖(默认已安装libxml2和libxslt) yum install xmlsec1-openssl xmlsec1-openssl-devel 2. 查看官网 www.a ...

  2. Linux速通07 硬盘分区、格式化及文件系统管理

    硬件设备与文件名的对应关系 # 在Linux系统中,每个设备都被当作一个文件来对待 # 各种设备在Linux中的文件名 设备 设备在Linux内的文件名 IDE硬盘 /dev/hd[a-d] SCSI ...

  3. 自己动手实现springboot运行时新增/更新外部接口

    最近有个需求:需要让现有springboot项目可以加载外部的jar包实现新增.更新接口逻辑.本着拿来主义的思维网上找了半天没有找到类似的东西,唯一有点相似的还是spring-loaded但是这个东西 ...

  4. Spring AOP的源码流程

    一.AOP完成日志输出 1,导入AOP模块 <dependency> <groupId>org.springframework</groupId> <arti ...

  5. 安卓Media相关类测试demo

    最近在研究安卓系统给app开发者提供的标准Media相关的工具类,本人做了一些demo来测试这些工具的使用方法. 本demo包含若干apk源码,需要说明以下几点: 1. 构建方式 Makefile使用 ...

  6. Linux入门视频笔记四(vim入门)

    一.vim的基本介绍(纯命令模式编辑器) 1.vim的两种模式:命令模式(不能输入任何东西).编辑模式(按i进入编辑模式) 2.ESC:从编辑模式退出到命令模式 3.保存: ①:wq code.c(如 ...

  7. iNeuOS工业互联平台,发布:消息管理、子用户权限管理、元件移动事件、联动控制和油表饼状图,v3.4版本

    目       录 1.      概述... 2 2.      平台演示... 2 3.      消息管理... 2 4.      子用户权限管理... 3 5.      元件移动事件... ...

  8. docker部署nodejs项目应用

    之前笔者弄了一套nestjs项目放在自己服务器上,并用pm2管理进程. 现在要把pm2停止,尝试一下用docker容器,那么首先要安装docker 一.安装docker 由于笔者服务器的系统是cent ...

  9. Codeforces-121C(逆康托展开)

    题目大意: 给你两个数n,k求n的全排列的第k小,有多少满足如下条件的数: 首先定义一个幸运数字:只由4和7构成 对于排列p[i]满足i和p[i]都是幸运数字 思路: 对于n,k<=1e9 一眼 ...

  10. 如何使用Topshelf与.NET泛型主机建立Windows服务

    1 前置阅读 在阅读本文章之前,你可以先阅读: Topshelf一个用于使用.NET构建Windows服务框架 2 使用 2.1 创建应用程序 首先,创建一个新的控制台应用程序并从nuget获取Top ...